• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

「関数リファレンス/register post type」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(リンク等調整)
 
(4人の利用者による、間の10版が非表示)
1行目: 1行目:
{{NeedTrans}}
+
<div id="Description">
{{Draft}}
+
== 説明 ==
{{テンプレートタグガイド|PHP}}
+
</div>
== Description ==
+
  
Create or modify a [[用語集#Post Type|post type]]. The function will accept an array ([[#$args|second optional parameter]]), along with a string for the post type name.
+
[[用語集#投稿タイプ|投稿タイプ]]を作成または変更します。
Do not use before init.
+
この <code>register_post_type()</code> は必ず <tt>[[プラグイン_API/アクションフック一覧/init | 'init']]</tt> アクションの中から呼び出してください。
 +
<tt>'init'</tt> より前に呼び出すと動作しないため、新規作成または変更した投稿タイプも正常に動作しません。
  
== Usage ==
+
<div id="Taxonomies">
 +
== タクソノミー ==
 +
</div>
  
<?php register_post_type( $post_type, $args ) ?>
+
投稿タイプを登録するとき、その投稿タイプにタクソノミー(カスタム分類)を付ける場合は、必ず <code>taxonomies</code> 引数を使って登録してください。
 +
そうしないと、<code>parse_query</code> や <code>pre_get_posts</code> 等のフィルターを使ったときにタクソノミーと投稿タイプが関連付けられていると認識されず、予想外の結果や異常が生じることがあります。
  
== Parameters ==
+
また、投稿タイプを作成するときにタクソノミーを登録するだけでなく、そのタクソノミーを <code>[[関数リファレンス/register_taxonomy|register_taxonomy()]]</code> を使って明示的に登録および定義しなければなりません。
  
{{Parameter|$post_type|string|Post type.}}
+
<div id="Reserved_Post_Types">
{{Parameter|$args|array|An array of arguments.|optional}}
+
=== 予約済みの投稿タイプ ===
 +
</div>
  
=== $args ===
+
次の投稿タイプは WordPress が使用するために予約されています。
Known Parameters for $args are:
+
* post - 投稿
 +
* page - 固定ページ
 +
* attachment - 添付ファイル
 +
* revision - リビジョン
 +
* nav_menu_item - ナビゲーションメニュー
  
{{Parameter|label|string|A '''plural''' descriptive name for the post type marked for translation.|optional|$post_type}}
+
さらに、次の投稿タイプも使用してはいけません。使用すると他の WordPress 関数の動作を妨害するからです。
 +
* action
 +
* order
 +
* theme
  
{{Parameter|singular_label|string|A '''singular''' descriptive name for the post type marked for translation.|optional|$label}}
+
一般に、作成する投稿タイプに接頭辞を付ける(例:<code>post</code> ではなく <code>my_post</code> のように)か、またはカスタムの <code>query_var</code> を指定すべきです。
 +
そうすることで WordPress が元から持っている <code>query_var</code>(例:投稿なら <code>post</code>)との重複を避けられます。
  
{{Parameter|description|string|A short descriptive summary of what the post type is.|optional|blank}}
+
また、投稿タイプがダッシュ(<code>-</code>)を含むとカスタム投稿タイプの管理画面に列を追加できません(<code>'manage_{カスタム投稿タイプ名}_posts_columns'</code> アクションを使ってカスタム投稿のリストに列を追加)。
  
{{Parameter|public|boolean|Whether posts of this type should be shown in the admin UI.|optional|false}}
+
もっと詳しい情報は、[[投稿タイプ]]を参照してください。
  
{{Parameter|publicly_queryable|boolean|Whether post_type queries can be performed from the front page.|optional|Whatever public is set as.}}
+
<div id="Usage">
 +
== 使い方 ==
 +
</div>
  
{{Parameter|exclude_from_search|boolean|Whether to exclude posts with this post type from search results.|importance|'''true''' if the type is not public, '''false''' if the type is public}}
+
<?php register_post_type( $post_type, $args ); ?>
  
{{Parameter|show_ui|boolean|Whether to generate a default UI for managing this post type.|optional|if not set, defaults to value of public argument}}
+
<div id="Parameters">
:* 'false' - do not display a user-interface for this post type
+
== パラメータ ==
:* 'true' - display a user-interface (admin panel) for this post type
+
</div>
  
<!--Note - not sure this is used {{Parameter|inherit_type|string|The post type from which to inherit the edit link and capability type.|optional}}-->
+
{{Parameter|$post_type|文字列|投稿タイプ('''最大 20 文字、大文字や空白は禁止''')。}}
{{Parameter|capability_type|string|The post type to use for checking read, edit, and delete capabilities.|optional|"post"}}
+
{{Parameter|$args|配列|引数の配列。|オプション}}
  
{{Parameter|edit_cap|string|The capability that controls editing a particular object of this post type.|optional|"edit_$capability_type" (edit_post).}}
+
<div id="Arguments">
 +
=== 引数 ===
 +
</div>
  
{{Parameter|edit_type_cap|string|The capability that controls editing objects of this post type as a class.|optional|"edit_ . $capability_type . s" (edit_posts).}}
+
{{Parameter|label|文字列|投稿タイプを翻訳するための複数形の名前。|オプション|$post_type}}
  
{{Parameter|edit_others_cap|string|The capability that controls editing objects of this post type that are owned by other users.|optional|"edit_others_ . $capability_type . s" (edit_others_posts).}}
+
{{Parameter|labels|配列|この投稿タイプのラベルの配列。デフォルトでは、投稿(<code>post</code>)の labels が階層なし投稿タイプに、固定ページ(<code>page</code>)の labels が階層あり投稿タイプに使用される。|オプション|空の場合は、'label' の値が 'name' へセットされ、'name' の値が 'singular_name' へセットされる。}}
 +
:* ''''name'''' - 投稿タイプの一般名、通常は複数形。省略すると <code>$post_type_object->label</code> と同じ値になる。
 +
:* ''''singular_name'''' - この投稿タイプのオブジェクト 1 個の名前(単数形)。デフォルトは 'name' の値。
 +
:* ''''menu_name'''' - メニュー名のテキスト。メニュー項目の名前を決める文字列です。デフォルトは 'name' の値。
 +
:* ''''name_admin_bar'''' - 管理バーの「新規追加」ドロップダウンに入れる名前。デフォルトは、'singular_name' があればその値になり、無ければ 'name' の値になる。
 +
:* ''''all_items'''' - メニューの「すべての〜」に使うテキスト。デフォルトは 'name' の値。
 +
:* ''''add_new'''' - 「新規追加」のテキスト。デフォルトは階層あり/なしどちらの投稿タイプも "Add New"。この文字列を国際化対応にするには、[[I18n_for_WordPress_Developers#Disambiguation_by_context|gettext context]] を使って、投稿タイプをマッチさせてください。例: <code>_x('Add New', 'product');</code>
 +
:* ''''add_new_item'''' - 「新規〜を追加」のテキスト。デフォルトは "Add New Post" または "Add New Page"。
 +
:* ''''edit_item'''' - 「〜を編集」のテキスト。管理画面で、このラベルはカスタム投稿の編集パネルのメインヘッダーに表示されます。デフォルトは階層なしなら "Edit Post"、階層あり投稿タイプなら "Edit Page"。
 +
:* ''''new_item'''' - 「新規〜」のテキスト。デフォルトは階層なしなら "New Post"、階層あり投稿タイプなら "New Page"。
 +
:* ''''view_item'''' - 「〜を表示」のテキスト。デフォルトは "View Post" または "View Page"。
 +
:* ''''search_items'''' - 「〜を検索」のテキスト。デフォルトは "Search Posts" または "Search Pages"。
 +
:* ''''not_found'''' - 「〜が見つかりませんでした」のテキスト。デフォルトは "No posts found" または "No pages found"。
 +
:* ''''not_found_in_trash'''' - 「ゴミ箱内に〜が見つかりませんでした」のテキスト。デフォルトは "No posts found in Trash" または "No pages found in Trash"。
 +
:* ''''parent_item_colon'''' - 「親〜:」のテキスト。階層あり投稿タイプのときのみ使われる。デフォルトは "Parent Page"。
  
{{Parameter|publish_others_cap|string|The capability that controls publishing objects of this post type.|optional|"publish_ . $capability_type . s" (publish_posts).}}
+
{{Parameter|description|文字列|投稿タイプの簡潔な説明。|オプション|ブランク}}
  
{{Parameter|read_cap|string|The capability that controls reading a particular object of this post type.|optional|"read_$capability_type" (read_post).}}
+
{{Parameter|public|真偽値|投稿タイプをパブリックにするかどうか。<code>true</code> の場合、管理画面とフロントエンド(ユーザー)の両方から利用可能。|オプション|false}}
 +
:* ''''false'''' - 投稿タイプをパブリックにしない。他のところで明示的に用意しない限り、管理画面とフロントエンドのどちらからも使えない。
 +
:* ''''true'''' - 投稿タイプをパブリックに'''する'''。フロントエンドと管理画面の両方から使えるように。
  
{{Parameter|delete_cap|string|The capability that controls deleting a particular object of this post type.|optional|"delete_$capability_type" (delete_post).}}
+
: '''参考:''' exclude_from_search、publicly_queriable、show_ui および show_in_nav_menus のデフォルト値は public から継承されるが、デフォルトが設定された後はこの関係に依存せず各々が個別の機能を制御する。
  
{{Parameter|hierarchical|boolean|Whether the post type is hierarchical.|optional|false}}
+
{{Parameter|exclude_from_search|真偽値|この投稿タイプの投稿をフロントエンドの検索結果から除外するかどうか。|必須|''public'' 引数の''反対の''値}}
 +
:* 'true' - <code>サイト/?s=検索対象文字列</code> の結果はこの投稿タイプの投稿を'''含まない'''。
 +
:* 'false' - <code>サイト/?s=検索対象文字列</code> の結果はこの投稿タイプの投稿を含む。
  
{{Parameter|supports|array|An alias for calling [[関数リファレンス/add_post_type_support|add_post_type_support()]]/[[:en:Function Reference/add_post_type_support|en]] directly.
+
: '''参考:'''タクソノミーのタームが関連付けられた投稿のリストを表示したければ、exclude_from_search を必ず false にセットする(例:<code>サイト/?タクソノミーのスラッグ=タームのスラッグ</code> または <code>サイト/タクソノミーのスラッグ/タームのスラッグ</code> を開く)。true にセットすると、タクソノミーアーカイブのページ(例:<code>taxonomy.php</code>)で WordPress は投稿を見つけられず、ページ送りすると 404 エラーが発生する…
:* 'title'
+
:* 'editor' (content)
+
:* 'author'
+
:* 'thumbnail'
+
:* 'excerpts'
+
:* 'trackbacks'
+
:* 'custom-fields'
+
:* 'comments'
+
:* 'revisions'
+
:* 'page-attributes' (parent, template, and menu order)
+
|optional}}
+
  
{{Parameter|register_meta_box_cb|string|Provide a callback function that will be called when setting up the meta boxes for the edit form. Do [[関数リファレンス/remove_meta_box|remove_meta_box()]]/[[:en:Function Reference/remove_meta_box|en]] and [[関数リファレンス/add_meta_box|add_meta_box()]] calls in the callback.|optional}}
+
{{Parameter|publicly_queryable|真偽値|フロントエンドで post_type クエリが実行可能かどうか。これは <code>parse_request()</code> の一部として実行される。|オプション|''public'' 引数の値}}
 +
: '''参考:'''次のようなクエリが影響を受ける(リライトによっても)。
 +
:* <code>?post_type={投稿タイプのキー}</code>
 +
:* <code>?{投稿タイプのキー}={投稿のスラッグ}</code>
 +
:* <code>?{投稿タイプの query_var}={投稿のスラッグ}</code>
  
{{Parameter|taxonomies|array|An array of taxonomy identifiers that will be registered for the post type. Taxonomies can be registered later with [[関数リファレンス/register_taxonomy|register_taxonomy()]]/[[:en:Function Reference/register_taxonomy|en]] or [[関数リファレンス/register_taxonomy_for_object_type|register_taxonomy_for_object_type()]]/[[:en:Function Reference/register_taxonomy_for_object_type|en]].|optional}}
+
: '''参考:''' FALSE にセットすると、カスタム投稿をプレビューも表示もできなくなる(404 エラーを返す)。
  
{{Parameter|menu_postition|string|The position in the menu order the post type should appear. |optional|null - defaults to the bottom}}
+
{{Parameter|show_ui|真偽値|この投稿タイプを管理するデフォルト UI を生成するかどうか。|オプション|''public'' 引数の値}}
 +
:* 'false' - この投稿タイプのユーザーインターフェースを表示しない
 +
:* 'true' - (管理パネルで)この投稿タイプのユーザーインターフェースを表示する
  
{{Parameter|menu_icon|string|The url to the icon to be used for this menu.|optional|null - defaults to the posts icon}}
+
: '''参考:'''投稿や固定ページのような<tt>ビルトイン</tt>(WordPress に最初から組み込まれている)投稿タイプは、意図的に false に設定されている。
  
{{Parameter|permalink_epmask|string|The url to the icon to be used for this menu.|optional|EP_NONE}}
+
{{Parameter|show_in_nav_menus|真偽値|ナビゲーションメニューでこの投稿タイプが選択可能かどうか。<!--Mention that the post selection panel is hidden by default and has to be enabled under panel settings? -->|オプション|''public'' 引数の値}}
  
{{Parameter|rewrite|array|Rewrite permalinks with this format.|optional|false}}
+
{{Parameter|show_in_menu|真偽値&#124;文字列|管理画面にこの投稿タイプを表示するかどうか。表示するには <tt>show_ui</tt> が <tt>true</tt> でなければならない。|オプション|''show_ui'' 引数の値}}
:* 'slug' - defaults to post_type
+
:* 'false' - 管理画面に表示しない
:* 'with_front' - defaults to true
+
:* 'true' - 管理画面のトップレベルのメニューとして表示する
 +
:* 'メニューの文字列' - 'tools.php' や 'edit.php?post_type=page' のようなトップレベルのページを指定すると、この投稿タイプをそのサブメニューに配置する。
  
{{Parameter|query_var|boolean|Name of the query var to use for this post type.|optional|false}}
+
: '''参考:''' あるプラグインが作成するメニューページのサブメニューとなるように 'メニューの文字列' を指定すると、この項目はサブメニューの最初の項目になると共に、トップレベルのリンク先を置き換える。そうしたくない場合は、プラグインが admin_menu にメニュー表示アクションをフックする add_action を実行するとき、優先度に 9 以下を指定する必要がある。
  
{{Parameter|_builtin|boolean|Whether this post type is a native or "built-in" post_type. '''Note: this Codex entry is for documentation - core developers recommend you don't use this when registering your own post type'''|not for general use|false}}
+
: '''参考:''' この引数は <tt>show_ui</tt> の値をデフォルトとするが、それ自体のデフォルト値である <tt>public</tt> に基づく(投稿タイプがパブリックに利用可能である場合には管理画面に表示する)と考えるのが最もわかりやすい。少なくとも、これは<tt>ビルトイン</tt>の投稿タイプである <tt>post</tt> と <tt>page</tt> に該当する。
:* 'false' - default this is a custom post type
+
<!-- Note: As this one inherits its value from <tt>show_ui</tt>, which inherits its value from <tt>public</tt>, it seems to be the most reliable property to determine, if a post type is meant to be publicly useable. At least this works for <tt>_builtin</tt> post types and only gives back <tt>post</tt> and <tt>page</tt>. -->
:* 'true' - this is a built-in native post type (post, page, attachment, revision, nav_menu_item)
+
  
{{Parameter|__edit_link|boolean|Link to edit an entry with this post type. '''Note: this Codex entry is for documentation '-' core developers recommend you don't use this when registering your own post type'''|not for general use|}}
+
{{Parameter|show_in_admin_bar|真偽値|この投稿タイプを WordPress の管理バーから使えるようにするかどうか。|オプション|''show_in_menu'' 引数の値}}
 +
 
 +
{{Parameter|menu_position|整数|この投稿タイプが表示されるメニューの位置。表示するには <tt>show_in_menu</tt> が <tt>true</tt> でなければならない。|オプション|null - デフォルトは「コメントの下」}}
 +
:* 5  - ''投稿''の下
 +
:* 10 - ''メディア''の下
 +
:* 15 - ''リンク''の下
 +
:* 20 - ''固定ページ''の下
 +
:* 25 - ''コメント''の下
 +
:* 60 - 最初の区切りの下(''コメント''の下に区切りがある)
 +
:* 65 - ''プラグイン''の下
 +
:* 70 - ''ユーザー''の下
 +
:* 75 - ''ツール''の下
 +
:* 80 - ''設定''の下
 +
:* 100 - 二つ目の区切りの下(''設定''の下に区切りがある)
 +
 
 +
{{Parameter|menu_icon|文字列|このメニューで使用するアイコンの URL、または [http://melchoyce.github.io/dashicons/ Dashicons] のアイコンの名前。|オプション|null - デフォルトは投稿アイコン}}
 +
 
 +
: 用例
 +
:* <code>'dashicons-video-alt'</code> ([http://melchoyce.github.io/dashicons/ Dashicons] のビデオアイコンを使う)
 +
:* <code>'get_template_directory_uri() . "images/cutom-posttype-icon.png"'</code> (現在のテーマに含まれているイメージを使う)
 +
 
 +
{{Parameter|capability_type|文字列&#124;配列|閲覧/編集/削除の権限を構築する文字列。権限を構築するベースにこの引数を使う場合、配列を指定すると複数形の名前を変更できる。例えば array('story', 'stories') を指定すると、最初の要素が単数形の権限、二番目が複数形の権限として使われる。これは、配列を指定しない場合に自動生成される名前("storys" になる筈)の代わりになる。'capabilities' パラメータによって明示的にセットされなければ、この 'capability_type' パラメータが権限構築のベースとして使われる。これを有効にするには `map_meta_cap` を true にする必要がある。|オプション|"post"}}
 +
<!-- The string to use to build the read, edit, and delete capabilities. May be passed as an array to allow for alternative plurals when using this argument as a base to construct the capabilities, e.g. array('story', 'stories') the first array element will be used for the singular capabilities and the second array element for the plural capabilities, this is instead of the auto generated version if no array is given which would be "storys".  The 'capability_type' parameter is used as a base to construct capabilities unless they are explicitly set with the 'capabilities' parameter. It seems that `map_meta_cap` needs to be set to true, to make this work. -->
 +
 
 +
: 使用できる権限タイプの幾つか(たぶん網羅したリストではない):
 +
:* post (デフォルト)
 +
:* page
 +
 
 +
: これらのビルトイン(組み込み済み)タイプは使用できない:
 +
:* attachment
 +
:* mediapage
 +
 
 +
{{Parameter|capabilities|配列|この投稿タイプの権限の配列。|オプション|capability_type を使って構築される}}
 +
: デフォルトでは、権限の配列に 7 種類のキーを入れることができる:
 +
:* edit_post, read_post, それと delete_post - これら 3 つは'''メタ権限'''であり、通常はコンテキストに応じて、対応する'''基本権限'''に変換される。コンテキストは例えば、編集/閲覧/削除される投稿(post)と、チェックされるユーザーまたは権限グループ(role)で決まる。つまり、これらの権限は通常、ユーザーや権限グループに対して直接に許可されるものではない。
 +
:* edit_posts - この投稿タイプのオブジェクトの編集可否を制御する。
 +
:*  edit_others_posts - この投稿タイプの、他のユーザーが所有するオブジェクトの編集可否を制御する。投稿タイプが投稿者をサポートしなければ、これは edit_posts と同様に振る舞う。
 +
:* publish_posts - この投稿タイプのオブジェクトの公開可否を制御する。
 +
:* read_private_posts - プライベートなオブジェクトの閲覧可否を制御する。
 +
 
 +
: '''参考''':後の 4 つは'''基本権限'''であり、WordPress コアのいろいろな箇所でチェックされる。
 +
 
 +
: さらに 7 種類の'''基本権限'''があるが、それらは map_meta_cap() を除く WordPress コアでは直接参照されない。map_meta_cap() は、最初に説明した 3 つの'''メタ権限'''を受け取り、コンテキストによってユーザーや権限グループに対してチェックされる一つ以上の'''基本権限'''へ変換する。下記の権限は map_meta_cap() の中でのみ使われる。そのため、下記の権限は 'map_meta_cap' 引数を true にして(デフォルトは false)投稿タイプを登録したときにデフォルトで割り当てられる。
 +
:* read - この投稿タイプのオブジェクトの閲覧可否を制御する。
 +
:* delete_posts - この投稿タイプのオブジェクトの削除可否を制御する。
 +
:* delete_private_posts - プライベートなオブジェクトの削除可否を制御する。
 +
:* delete_published_posts - 公開されているオブジェクトの削除可否を制御する。
 +
:* delete_others_posts - 他のユーザーが所有するオブジェクトの削除可否を制御する。投稿タイプが投稿者をサポートしなければ、これは delete_posts と同様に振る舞う。
 +
:* edit_private_posts - プライベートなオブジェクトの編集可否を制御する。
 +
:* edit_published_posts - 公開されているオブジェクトの編集可否を制御する。
 +
 
 +
例えば、ある <tt>'capability_type'</tt> を割り当てた後に <tt>$GLOBALS['wp_post_types']['カスタム投稿タイプ画名']</tt> 配列の中を見ると、次のような値が見えるでしょう:
 +
 
 +
<pre>
 +
[cap] => stdClass Object
 +
(
 +
[edit_post] => "edit_{$capability_type}"
 +
[read_post] => "read_{$capability_type}"
 +
[delete_post] => "delete_{$capability_type}"
 +
[edit_posts] => "edit_{$capability_type}s"
 +
[edit_others_posts] => "edit_others_{$capability_type}s"
 +
[publish_posts] => "publish_{$capability_type}s"
 +
[read_private_posts] => "read_private_{$capability_type}s"
 +
        [delete_posts]          => "delete_{$capability_type}s"
 +
        [delete_private_posts]  => "delete_private_{$capability_type}s"
 +
        [delete_published_posts] => "delete_published_{$capability_type}s"
 +
        [delete_others_posts]    => "delete_others_{$capability_type}s"
 +
        [edit_private_posts]    => "edit_private_{$capability_type}s"
 +
        [edit_published_posts]  => "edit_published_{$capability_type}s"
 +
)
 +
</pre>
 +
 
 +
''参考: "s" は(名前が)複数形の権限の末尾に付きます。''
 +
 
 +
{{Parameter|map_meta_cap|真偽値|WordPress が持つデフォルトのメタ権限処理を使用するかどうか。|オプション|null}}
 +
 
 +
: '''参考:'''<code>false</code> を指定すると admin 権限グループのユーザーは投稿タイプを編集できなくなります。その場合は edit_post 権限をすべての権限グループ(投稿タイプを追加または編集する)へ追加しなければなりません。
 +
 
 +
{{Parameter|hierarchical|真偽値|この投稿タイプが階層を持つ(例:固定ページ)かどうか。true の場合、親を指定できるようになる。編集ページに親を選択するボックスを表示するために、'supports' パラメータに 'page-attributes' を含めなければならない。|オプション|false}}
 +
 
 +
: '''参考:'''このパラメータは元々[[Pages|固定ページ]]のために用意された。もし多数のエントリーを作る(ざっと 100 を超えるような)つもりなら、メモリー不足の問題が発生するだろう。このパラメータを ''true'' にすると、その投稿タイプの管理画面を表示するときに、WordPress はその投稿タイプのすべてのエントリーをすべてのメタデータと一緒に取得するから。
 +
 
 +
{{Parameter|supports|配列&#124;真偽値| [[関数リファレンス/add_post_type_support|add_post_type_support()]]/[[:en:Function Reference/add_post_type_support|en]]  を直接呼び出すエイリアス。[[Version_3.5|バージョン 3.5]] 以降では、配列の代わりに真偽値 <strong>false</strong> を指定することによりデフォルトの動作(title と editor)を止めることができる。|オプション|title と editor}}
 +
:* 'title' (タイトル)
 +
:* 'editor' (内容の編集)
 +
:* 'author' (作成者)
 +
:* 'thumbnail' (アイキャッチ画像。現在のテーマが [[投稿サムネイル|post-thumbnails]] をサポートしていること)
 +
:* 'excerpt' (抜粋)
 +
:* 'trackbacks' (トラックバック送信)
 +
:* 'custom-fields' (カスタムフィールド)
 +
:* 'comments' (コメントの他、編集画面にコメント数のバルーンを表示する)
 +
:* 'revisions' (リビジョンを保存する)
 +
:* 'page-attributes' (メニューの順序。「親〜」オプションを表示するために hierarchical が true であること)
 +
:* 'post-formats' (投稿のフォーマットを追加。[[投稿フォーマット]]を参照)
 +
 
 +
: '''参考:'''アイキャッチ画像を使用できるカスタム投稿タイプを使うときは、テーマがアイキャッチ画像をサポートしているか、または [[関数リファレンス/add_theme_support|add_theme_support()]] を呼び出しているかチェックすること。
 +
 
 +
{{Parameter|register_meta_box_cb|callback|編集フォームのメタボックスをセットアップするのに呼び出すコールバック関数を指定する(関数名を文字列で指定)。コールバック関数は 1 つの引数 <tt>$post</tt> (現在編集中の投稿の <tt>WP_Post</tt> オブジェクト)を受け取る。コールバックの中では [[関数リファレンス/remove_meta_box|remove_meta_box()]]/[[:en:Function Reference/remove_meta_box|en]] と [[関数リファレンス/add_meta_box|add_meta_box()]] を呼び出す。|オプション}}
 +
 
 +
{{Parameter|taxonomies|配列|この投稿タイプで使用する、登録されたタクソノミーの配列(<code>category</code> や <code>post_tag</code> など)。[[関数リファレンス/register_taxonomy_for_object_type|register_taxonomy_for_object_type()]] を直接呼び出す代わりに使用可能。タクソノミー(カスタム分類)は [[関数リファレンス/register_taxonomy|register_taxonomy()]] で登録する必要がある。|オプション|タクソノミー無し}}
 +
 
 +
{{Parameter|has_archive|真偽値&#124;文字列|この投稿タイプのアーカイブを有効にする。デフォルトでは、アーカイブのスラッグとして <tt>$post_type</tt> が使われる。|オプション|false}}
 +
: '''参考:'''リライトが有効になっている時は、適切なリライトルールが生成される。rewrite オプションを指定して、使用されるスラッグを変更することもできる。
 +
 
 +
{{Parameter|permalink_epmask|文字列|リライト用 endpoint ビットマスクのデフォルト値。詳細は [http://core.trac.wordpress.org/ticket/12605 Trac チケット 12605] および [http://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/ Make WordPress Plugins ブログの endpoint を要約した投稿]を参照。|オプション|EP_PERMALINK}}
 +
: '''参考:'''バージョン 3.4 から、この引数は <tt>rewrite</tt> の <tt>'ep_mask'</tt> 引数によって置き換えられました。
 +
 
 +
{{Parameter|rewrite|真偽値&#124;配列|この投稿タイプのパーマリンクのリライト方法を変更する。リライトを避けるには false を指定する。|オプション|true - <tt>$post_type</tt> をスラッグに使う}}
 +
:$args 配列
 +
:* <tt>'slug' => 文字列</tt> パーマリンク構造のスラッグを変更。デフォルトは <tt>$post_type</tt> の値。翻訳可能であること。
 +
:* <tt>'with_front' => 真偽値</tt> Should the permalink structure be prepended with the front base. (例:パーマリンク構造が /blog/ である場合、false ならリンクは /news/、true なら /blog/news/ になる。)デフォルトは true
 +
:* <tt>'feeds' => 真偽値</tt> この投稿タイプについてフィードのパーマリンク構造を作成する。デフォルトは <tt>has_archive</tt> 引数の値
 +
:* <tt>'pages' => 真偽値</tt> パーマリンク構造をページ送りに対応させる。デフォルトは true
 +
:* <tt>'ep_mask' => 定数</tt> ''バージョン 3.4 以降'' この投稿タイプに endpoint マスクを割り当てる。詳しくは [http://core.trac.wordpress.org/ticket/19275 Trac チケット 19275] および [https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/ Make WordPress Plugins ブログの endpoint を要約した投稿]を参照。
 +
:** これを指定せず <tt>permalink_epmask</tt> がセットされていると、<tt>permalink_epmask</tt> の値が使われる。
 +
:** これを指定せず <tt>permalink_epmask</tt> もセットされていなければ、デフォルトの <tt>EP_PERMALINK</tt> になる。
 +
 
 +
: '''参考:'''プラグインの内部で投稿タイプを登録する場合は、有効化と無効化のフック(下記の「[[#Flushing_Rewrite_on_Activation|有効化するときリライトルールをフラッシュする]]」を参照)の中で [[関数リファレンス/flush_rewrite_rules|flush_rewrite_rules()]] を呼び出すこと。もし  [[関数リファレンス/flush_rewrite_rules|flush_rewrite_rules()]] /[[:en:Function_Reference/flush_rewrite_rules|en]]を使わない場合は、カスタム投稿タイプが正しいパーマリンク構造を表示するために、管理画面の ''設定 &gt; パーマリンク設定'' を開いてパーマリンク構造を更新(変更を保存)する必要がある。
 +
<!-- : '''Note:''' If registering a post type inside of a plugin, call [[関数リファレンス/flush_rewrite_rules|flush_rewrite_rules()]] in your activation and deactivation hook (see [[#Flushing_Rewrite_on_Activation|Flushing Rewrite on Activation]] below). If [[関数リファレンス/flush_rewrite_rules|flush_rewrite_rules()]]is not used, then you will have to manually go to Settings > Permalinks and refresh your permalink structure before your custom post type will show the correct structure. -->
 +
 
 +
{{Parameter|query_var|真偽値&#124;文字列|この投稿に使用する <tt>query_var</tt> キーの名前。|オプション|true - $post_type の値}}
 +
:* 'false' - <tt>query_var</tt> キーを使用しない。URL 形式のクエリ <code>/?{query_var}={投稿のスラッグ}</code> では表示できない。
 +
:* '文字列' - <code>/?{この引数で指定した文字列}={投稿のスラッグ}</code> で意図したとおり表示される。
 +
 
 +
:'''参考:''' 'publicly_queryable' パラメータが false のとき、この query_var パラメータは無効。query_var パラメータを指定するとカスタム投稿タイプのクエリ変数が WordPress の query_var 配列に追加され、認識されるようになる。この配列にないクエリ変数は WordPress によって取り除かれる。
 +
 
 +
:* true を指定すると、カスタム投稿タイプ(例:book)を次の形式でリクエストできる: <code>example.com/?book=life-of-pi</code>
 +
:* true ではなく文字列を指定すると(例:'publication')次の形式でリクエストできる: <code>example.com/?publication=life-of-pi</code>
 +
 
 +
{{Parameter|can_export|真偽値|この投稿タイプをエクスポート可能かどうか。|オプション|true}}
 +
 
 +
{{Parameter|_builtin|真偽値|この投稿タイプがネイティブ、あるいはビルトインかどうか。 '''注意: この Codex エントリはドキュメント用です。独自の投稿タイプを登録するときにこれを使わないよう、コア開発者は勧めています。'''|not for general use|false}}
 +
:* 'false' - デフォルト。これはカスタム投稿タイプ
 +
:* 'true' - これはビルトイン(ネイティブ)の投稿タイプ(post, page, attachment, revision, nav_menu_item)
 +
 
 +
{{Parameter|_edit_link|真偽値|この投稿タイプのエントリを編集するリンク。 '''注意: この Codex エントリはドキュメント用です。独自の投稿タイプを登録するときにこれを使わないよう、コア開発者は勧めています。'''|not for general use|}}
 
:* 'post.php?post=%d'
 
:* 'post.php?post=%d'
  
== Example ==
+
<div id="Return_Values">
 +
 
 +
== 戻り値 ==
 +
</div>
 +
 
 +
; (オブジェクト &#124; <tt>[[クラスリファレンス/WP_Error | WP_Error]]</tt>) : 登録された投稿タイプのオブジェクト、またはエラーオブジェクト。
 +
 
 +
<div id="Example">
 +
== 用例 ==
 +
</div>
 +
 
 +
"book" というカスタム投稿タイプを登録する例です。
 +
 
 +
=== 基本形 ===
 +
 
 
<pre>
 
<pre>
<?php
+
function codex_custom_init() {
 +
    $args = array(
 +
      'public' => true,
 +
      'label'  => 'Books'
 +
    );
 +
    register_post_type( 'book', $args );
 +
}
 +
add_action( 'init', 'codex_custom_init' );
 +
</pre>
  
$args = array(
+
=== 細かく指定 ===
        'label' => __('Albums'),
+
        'singular_label' => __('Album'),
+
        'public' => true,
+
        'show_ui' => true,
+
        'capability_type' => 'page',
+
        'hierarchical' => false,
+
        'rewrite' => true,
+
        'query_var' => 'album',
+
        'supports' => array('title', 'thumbnail')
+
        );
+
  
register_post_type( 'album' , $args );
+
<pre>
 +
add_action( 'init', 'codex_book_init' );
 +
/**
 +
* カスタム投稿タイプ book を登録する。
 +
*
 +
* @link http://codex.wordpress.org/Function_Reference/register_post_type
 +
*/
 +
function codex_book_init() {
 +
$labels = array(
 +
'name'              => _x( 'Books', 'post type general name', 'your-plugin-textdomain' ),
 +
'singular_name'      => _x( 'Book', 'post type singular name', 'your-plugin-textdomain' ),
 +
'menu_name'          => _x( 'Books', 'admin menu', 'your-plugin-textdomain' ),
 +
'name_admin_bar'    => _x( 'Book', 'add new on admin bar', 'your-plugin-textdomain' ),
 +
'add_new'            => _x( 'Add New', 'book', 'your-plugin-textdomain' ),
 +
'add_new_item'      => __( 'Add New Book', 'your-plugin-textdomain' ),
 +
'new_item'          => __( 'New Book', 'your-plugin-textdomain' ),
 +
'edit_item'          => __( 'Edit Book', 'your-plugin-textdomain' ),
 +
'view_item'          => __( 'View Book', 'your-plugin-textdomain' ),
 +
'all_items'          => __( 'All Books', 'your-plugin-textdomain' ),
 +
'search_items'      => __( 'Search Books', 'your-plugin-textdomain' ),
 +
'parent_item_colon'  => __( 'Parent Books:', 'your-plugin-textdomain' ),
 +
'not_found'          => __( 'No books found.', 'your-plugin-textdomain' ),
 +
'not_found_in_trash' => __( 'No books found in Trash.', 'your-plugin-textdomain' )
 +
);
 +
 
 +
$args = array(
 +
'labels'            => $labels,
 +
'public'            => true,
 +
'publicly_queryable' => true,
 +
'show_ui'            => true,
 +
'show_in_menu'      => true,
 +
'query_var'          => true,
 +
'rewrite'            => array( 'slug' => 'book' ),
 +
'capability_type'    => 'post',
 +
'has_archive'        => true,
 +
'hierarchical'      => false,
 +
'menu_position'      => null,
 +
'supports'          => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
 +
);
  
?>
+
register_post_type( 'book', $args );
 +
}
 
</pre>
 
</pre>
  
 +
=== メッセージをカスタマイズ ===
 +
 +
<pre>
 +
add_filter( 'post_updated_messages', 'codex_book_updated_messages' );
 +
/**
 +
* Book を更新するときのメッセージ。
 +
*
 +
* See /wp-admin/edit-form-advanced.php
 +
*
 +
* @param array $messages 元の投稿更新メッセージ。
 +
*
 +
* @return array カスタム投稿タイプ用に修正した更新メッセージ。
 +
*/
 +
function codex_book_updated_messages( $messages ) {
 +
$post            = get_post();
 +
$post_type        = get_post_type( $post );
 +
$post_type_object = get_post_type_object( $post_type );
 +
 +
$messages['book'] = array(
 +
0  => '', // 未使用。メッセージはインデックス 1 番から始まる。
 +
1  => __( 'Book updated.', 'your-plugin-textdomain' ),
 +
2  => __( 'Custom field updated.', 'your-plugin-textdomain' ),
 +
3  => __( 'Custom field deleted.', 'your-plugin-textdomain' ),
 +
4  => __( 'Book updated.', 'your-plugin-textdomain' ),
 +
/* 翻訳する方へ: %s はリビジョンの日付と時刻 */
 +
5  => isset( $_GET['revision'] ) ? sprintf( __( 'Book restored to revision from %s', 'your-plugin-textdomain' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
 +
6  => __( 'Book published.', 'your-plugin-textdomain' ),
 +
7  => __( 'Book saved.', 'your-plugin-textdomain' ),
 +
8  => __( 'Book submitted.', 'your-plugin-textdomain' ),
 +
9  => sprintf(
 +
__( 'Book scheduled for: <strong>%1$s</strong>.', 'your-plugin-textdomain' ),
 +
// 翻訳する方へ: 公開ボックスの日付フォーマット。 http://php.net/date を参照。
 +
date_i18n( __( 'M j, Y @ G:i', 'your-plugin-textdomain' ), strtotime( $post->post_date ) )
 +
),
 +
10 => __( 'Book draft updated.', 'your-plugin-textdomain' )
 +
);
 +
 +
if ( $post_type_object->publicly_queryable ) {
 +
$permalink = get_permalink( $post->ID );
 +
 +
$view_link = sprintf( ' <a href="%s">%s</a>', esc_url( $permalink ), __( 'View book', 'your-plugin-textdomain' ) );
 +
$messages[ $post_type ][1] .= $view_link;
 +
$messages[ $post_type ][6] .= $view_link;
 +
$messages[ $post_type ][9] .= $view_link;
 +
 +
$preview_permalink = add_query_arg( 'preview', 'true', $permalink );
 +
$preview_link = sprintf( ' <a target="_blank" href="%s">%s</a>', esc_url( $preview_permalink ), __( 'Preview book', 'your-plugin-textdomain' ) );
 +
$messages[ $post_type ][8]  .= $preview_link;
 +
$messages[ $post_type ][10] .= $preview_link;
 +
}
 +
 +
return $messages;
 +
}
 +
</pre>
 +
 +
=== コンテキストヘルプを付ける ===
 +
 +
<pre>
 +
// Books のコンテキストヘルプを表示する
 +
 +
function codex_add_help_text( $contextual_help, $screen_id, $screen ) {
 +
  //$contextual_help .= var_dump( $screen ); // $screen->id を確かめるのに使う
 +
  if ( 'book' == $screen->id ) {
 +
    $contextual_help =
 +
      '<p>' . __('Things to remember when adding or editing a book:', 'your_text_domain') . '</p>' .
 +
      '<ul>' .
 +
      '<li>' . __('Specify the correct genre such as Mystery, or Historic.', 'your_text_domain') . '</li>' .
 +
      '<li>' . __('Specify the correct writer of the book.  Remember that the Author module refers to you, the author of this book review.', 'your_text_domain') . '</li>' .
 +
      '</ul>' .
 +
      '<p>' . __('If you want to schedule the book review to be published in the future:', 'your_text_domain') . '</p>' .
 +
      '<ul>' .
 +
      '<li>' . __('Under the Publish module, click on the Edit link next to Publish.', 'your_text_domain') . '</li>' .
 +
      '<li>' . __('Change the date to the date to actual publish this article, then click on Ok.', 'your_text_domain') . '</li>' .
 +
      '</ul>' .
 +
      '<p><strong>' . __('For more information:', 'your_text_domain') . '</strong></p>' .
 +
      '<p>' . __('<a href="http://codex.wordpress.org/Posts_Edit_SubPanel" target="_blank">Edit Posts Documentation</a>', 'your_text_domain') . '</p>' .
 +
      '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>', 'your_text_domain') . '</p>' ;
 +
  } elseif ( 'edit-book' == $screen->id ) {
 +
    $contextual_help =
 +
      '<p>' . __('This is the help screen displaying the table of books blah blah blah.', 'your_text_domain') . '</p>' ;
 +
  }
 +
  return $contextual_help;
 +
}
 +
add_action( 'contextual_help', 'codex_add_help_text', 10, 3 );
 +
</pre>
 +
 +
=== ヘルプタブ(WordPress 3.3 以降)を付ける ===
 +
 +
<pre>
 +
function codex_custom_help_tab() {
 +
 +
  $screen = get_current_screen();
 +
 +
  // 投稿タイプが book でなければ早々にリターン。
 +
  if ( 'book' != $screen->post_type )
 +
    return;
 +
 +
  // ヘルプタブの引数を準備する。
 +
  $args = array(
 +
    'id'      => 'you_custom_id', // タブのユニークな ID
 +
    'title'  => 'Custom Help', // タブのユニークなタイトル(表示される)
 +
    'content' => '<h3>Help Title</h3><p>Help content</p>',  // ヘルプ本文
 +
  );
 +
 
 +
  // ヘルプタブを追加する。
 +
  $screen->add_help_tab( $args );
 +
 +
}
 +
 +
add_action('admin_head', 'codex_custom_help_tab');
 +
</pre>
 +
 +
<div id="Flushing_Rewrite_on_Activation">
 +
== 有効化するときリライトルールをフラッシュする ==
 +
</div>
 +
 +
パーマリンクを正しく働かせるには、プラグインを有効化するとき、下記の例のように register_activation_hook のコールバックの中から my_cpt_init (カスタム投稿タイプを登録する自作の関数)を呼び出すことに注意してください:
 +
<pre>
 +
add_action( 'init', 'my_cpt_init' );
 +
function my_cpt_init() {
 +
    register_post_type( ... );
 +
}
 +
 +
function my_rewrite_flush() {
 +
    // 最初に、上記の関数(my_cpt_init)でカスタム投稿タイプ(CPT)を「追加」する。
 +
    // 注意:ここで「追加」と括弧を付けて書いたのは、まだ CPT がデータベースに登録されないため。
 +
    // 後ほど、この CPT の投稿を追加したときに初めて
 +
    // 投稿エントリーの post_type カラム(データベースの列)からのみ CPT が参照される。
 +
    my_cpt_init();
 +
 +
    // 重要:下記はこの例のプラグイン有効化フックの中で *のみ* 実行される!
 +
    // これをページ読み込みの度に呼び出すことは *絶対に行ってはならない*!!
 +
    flush_rewrite_rules();
 +
}
 +
register_activation_hook( __FILE__, 'my_rewrite_flush' );
 +
</pre>
 +
 +
テーマの場合は、代わりに after_switch_theme フックを使います。次のように:
 +
<pre>
 +
add_action( 'init', 'my_cpt_init' );
 +
function my_cpt_init() {
 +
    register_post_type( ... );
 +
}
 +
 +
function my_rewrite_flush() {
 +
    flush_rewrite_rules();
 +
}
 +
add_action( 'after_switch_theme', 'my_rewrite_flush' );
 +
</pre>
 +
 +
<div id="Notes">
 +
== 参考 ==
 +
</div>
 +
 +
* <tt>[[関数リファレンス/do_action | do_action()]]</tt> を使用します:
 +
** <tt>[[プラグイン API/アクションフック一覧/registered_post_type | 'registered_post_type']]</tt> を呼び出します。パラメータは <tt>$post_type</tt> と <tt>$args</tt> です。
 +
 +
* '''public''' 属性はオプションですが、<tt>register_post_type()</tt> の引数が ''そのまま'' <tt>[[関数リファレンス/get_post_types | get_post_types()]]</tt> 関数によって取得されます。そのため、もし '''publicly_queriable''', '''show_ui''', '''show_in_nav_menus''', および '''exclude_from_search''' をそれぞれ true にセットしても(public のデフォルトは false なので)、'''public''' 属性を true にした場合と同じ結果になりません。[http://core.trac.wordpress.org/ticket/18950 bug 18950] を参照してください。
 +
 +
<div id="Change_Log">
 
== 変更履歴 ==
 
== 変更履歴 ==
 +
</div>
  
* Since [[Version 2.9|2.9]]
+
* [[Version_3.5|3.5.0]]: <tt>'supports'</tt> 引数を真偽値 <tt>false</tt> にセットすると、デフォルトで有効な title と editor を無効化できるようになりました。
 +
* [[Version 2.9|2.9]] から導入されました。
  
== Source File ==
+
<div id="Source_File">
<tt>register_post_type()</tt> is located in {{Trac|wp-includes/post.php}}.
+
== ソースファイル ==
 +
</div>
  
== Resources ==
+
<tt>register_post_type()</tt> は {{Trac|wp-includes/post.php}} にあります。
  
* [http://wpengineer.com/impressions-of-custom-post-type/ First Impressions of Custom Post Types]
+
<div id="Resources">
* [http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/ Custom Post Types in WordPress 3.0]
+
== リソース ==
* [http://kovshenin.com/archives/extending-custom-post-types-in-wordpress-3-0/ Extending Custom Post Types in WordPress 3.0]
+
</div>
* [http://wordpress.org/extend/plugins/custom-post-type-ui/ Custom Post Type UI Plugin - create and administer custom post types and custom taxonomies]
+
  
{{原文|Function Reference/register_post_type|85701}}<!-- 14:38, 10 April 2010 Bono 版 -->
+
* [[Custom Post Types|カスタム投稿タイプ]]
 +
* [http://core.trac.wordpress.org/ticket/12943 Feeds for Custom Post Types (Trac 12943)]
 +
* [http://lists.automattic.com/pipermail/wp-hackers/2010-June/032655.html Discussion on wp-hackers about capabilities]
 +
* [http://lists.automattic.com/pipermail/wp-hackers/2010-June/032657.html Another discussion on wp-hackers about capabilities]
 +
* [http://wpkrauts.com/2013/registering-custom-taxonomies-for-custom-post-types-the-right-way/ Register Custom Post Types and Taxonomies the right way, so you have a reliable interconnection]
 +
* [https://gist.github.com/justintadlock/6552000 Help file when registering post types]
  
== Related ==
+
<div id="Generators">
 +
=== 生成ツール ===
 +
</div>
 +
 
 +
* [http://generatewp.com/post-type/ WordPress Post Type Generator]
 +
* [http://weareo3.com/wordpress-custom-post-type-generator/ Custom Post Type Generator]
 +
* [http://themergency.com/generators/wordpress-custom-post-types/ Themergency Custom Post Type code generator]
 +
 
 +
<div id="Plugins">
 +
=== プラグイン ===
 +
</div>
 +
 
 +
* [http://wordpress.org/extend/plugins/types/ Types Plugin - Custom Post Types, Custom Taxonomy and Custom Fields]
 +
* [http://wordpress.org/extend/plugins/custom-post-type-ui/ Custom Post Type UI Plugin]
 +
* [http://wordpress.org/extend/plugins/cms-press/ CMS Press]
 +
* [http://wordpress.org/extend/plugins/gd-taxonomies-tools/ GD Custom Posts And Taxonomies Tools]
 +
* [http://wordpress.org/extend/plugins/post-types-order/ Change Order for Custom Post Types in WordPress 3.0]
 +
* [http://web-profile.com.ua/wordpress/custom-post-types/ Custom Post Type Example]
 +
 
 +
<div id="Related">
 +
== 関連資料 ==
 +
</div>
 +
 
 +
{{Post Type Tags}}
  
 
{{Tag Footer}}
 
{{Tag Footer}}
 +
 +
{{原文|Function Reference/register_post_type|145066}} <!-- 18:20, 25 July 2014 Donwilson 版 -->
  
 
{{DEFAULTSORT:Register_post_type}}
 
{{DEFAULTSORT:Register_post_type}}
 
[[Category:関数]]
 
[[Category:関数]]
 
[[Category:wp2.9]]
 
[[Category:wp2.9]]
 +
[[Category:wp3.5]]
  
 
[[en:Function Reference/register_post_type]]
 
[[en:Function Reference/register_post_type]]
 +
[[zh-hans:函数参考/register_post_type]]

2015年8月11日 (火) 11:04時点における最新版

投稿タイプを作成または変更します。 この register_post_type() は必ず 'init' アクションの中から呼び出してください。 'init' より前に呼び出すと動作しないため、新規作成または変更した投稿タイプも正常に動作しません。

タクソノミー

投稿タイプを登録するとき、その投稿タイプにタクソノミー(カスタム分類)を付ける場合は、必ず taxonomies 引数を使って登録してください。 そうしないと、parse_querypre_get_posts 等のフィルターを使ったときにタクソノミーと投稿タイプが関連付けられていると認識されず、予想外の結果や異常が生じることがあります。

また、投稿タイプを作成するときにタクソノミーを登録するだけでなく、そのタクソノミーを register_taxonomy() を使って明示的に登録および定義しなければなりません。

予約済みの投稿タイプ

次の投稿タイプは WordPress が使用するために予約されています。

  • post - 投稿
  • page - 固定ページ
  • attachment - 添付ファイル
  • revision - リビジョン
  • nav_menu_item - ナビゲーションメニュー

さらに、次の投稿タイプも使用してはいけません。使用すると他の WordPress 関数の動作を妨害するからです。

  • action
  • order
  • theme

一般に、作成する投稿タイプに接頭辞を付ける(例:post ではなく my_post のように)か、またはカスタムの query_var を指定すべきです。 そうすることで WordPress が元から持っている query_var(例:投稿なら post)との重複を避けられます。

また、投稿タイプがダッシュ(-)を含むとカスタム投稿タイプの管理画面に列を追加できません('manage_{カスタム投稿タイプ名}_posts_columns' アクションを使ってカスタム投稿のリストに列を追加)。

もっと詳しい情報は、投稿タイプを参照してください。

使い方

<?php register_post_type( $post_type, $args ); ?>

パラメータ

$post_type
文字列) (必須) 投稿タイプ(最大 20 文字、大文字や空白は禁止)。
初期値: なし
$args
配列) (オプション) 引数の配列。
初期値: なし

引数

label
文字列) (オプション) 投稿タイプを翻訳するための複数形の名前。
初期値: $post_type
labels
配列) (オプション) この投稿タイプのラベルの配列。デフォルトでは、投稿(post)の labels が階層なし投稿タイプに、固定ページ(page)の labels が階層あり投稿タイプに使用される。
初期値: 空の場合は、'label' の値が 'name' へセットされ、'name' の値が 'singular_name' へセットされる。
  • 'name' - 投稿タイプの一般名、通常は複数形。省略すると $post_type_object->label と同じ値になる。
  • 'singular_name' - この投稿タイプのオブジェクト 1 個の名前(単数形)。デフォルトは 'name' の値。
  • 'menu_name' - メニュー名のテキスト。メニュー項目の名前を決める文字列です。デフォルトは 'name' の値。
  • 'name_admin_bar' - 管理バーの「新規追加」ドロップダウンに入れる名前。デフォルトは、'singular_name' があればその値になり、無ければ 'name' の値になる。
  • 'all_items' - メニューの「すべての〜」に使うテキスト。デフォルトは 'name' の値。
  • 'add_new' - 「新規追加」のテキスト。デフォルトは階層あり/なしどちらの投稿タイプも "Add New"。この文字列を国際化対応にするには、gettext context を使って、投稿タイプをマッチさせてください。例: _x('Add New', 'product');
  • 'add_new_item' - 「新規〜を追加」のテキスト。デフォルトは "Add New Post" または "Add New Page"。
  • 'edit_item' - 「〜を編集」のテキスト。管理画面で、このラベルはカスタム投稿の編集パネルのメインヘッダーに表示されます。デフォルトは階層なしなら "Edit Post"、階層あり投稿タイプなら "Edit Page"。
  • 'new_item' - 「新規〜」のテキスト。デフォルトは階層なしなら "New Post"、階層あり投稿タイプなら "New Page"。
  • 'view_item' - 「〜を表示」のテキスト。デフォルトは "View Post" または "View Page"。
  • 'search_items' - 「〜を検索」のテキスト。デフォルトは "Search Posts" または "Search Pages"。
  • 'not_found' - 「〜が見つかりませんでした」のテキスト。デフォルトは "No posts found" または "No pages found"。
  • 'not_found_in_trash' - 「ゴミ箱内に〜が見つかりませんでした」のテキスト。デフォルトは "No posts found in Trash" または "No pages found in Trash"。
  • 'parent_item_colon' - 「親〜:」のテキスト。階層あり投稿タイプのときのみ使われる。デフォルトは "Parent Page"。
description
文字列) (オプション) 投稿タイプの簡潔な説明。
初期値: ブランク
public
真偽値) (オプション) 投稿タイプをパブリックにするかどうか。true の場合、管理画面とフロントエンド(ユーザー)の両方から利用可能。
初期値: false
  • 'false' - 投稿タイプをパブリックにしない。他のところで明示的に用意しない限り、管理画面とフロントエンドのどちらからも使えない。
  • 'true' - 投稿タイプをパブリックにする。フロントエンドと管理画面の両方から使えるように。
参考: exclude_from_search、publicly_queriable、show_ui および show_in_nav_menus のデフォルト値は public から継承されるが、デフォルトが設定された後はこの関係に依存せず各々が個別の機能を制御する。
exclude_from_search
真偽値) (必須) この投稿タイプの投稿をフロントエンドの検索結果から除外するかどうか。
初期値: public 引数の反対の
  • 'true' - サイト/?s=検索対象文字列 の結果はこの投稿タイプの投稿を含まない
  • 'false' - サイト/?s=検索対象文字列 の結果はこの投稿タイプの投稿を含む。
参考:タクソノミーのタームが関連付けられた投稿のリストを表示したければ、exclude_from_search を必ず false にセットする(例:サイト/?タクソノミーのスラッグ=タームのスラッグ または サイト/タクソノミーのスラッグ/タームのスラッグ を開く)。true にセットすると、タクソノミーアーカイブのページ(例:taxonomy.php)で WordPress は投稿を見つけられず、ページ送りすると 404 エラーが発生する…
publicly_queryable
真偽値) (オプション) フロントエンドで post_type クエリが実行可能かどうか。これは parse_request() の一部として実行される。
初期値: public 引数の値
参考:次のようなクエリが影響を受ける(リライトによっても)。
  • ?post_type={投稿タイプのキー}
  • ?{投稿タイプのキー}={投稿のスラッグ}
  • ?{投稿タイプの query_var}={投稿のスラッグ}
参考: FALSE にセットすると、カスタム投稿をプレビューも表示もできなくなる(404 エラーを返す)。
show_ui
真偽値) (オプション) この投稿タイプを管理するデフォルト UI を生成するかどうか。
初期値: public 引数の値
  • 'false' - この投稿タイプのユーザーインターフェースを表示しない
  • 'true' - (管理パネルで)この投稿タイプのユーザーインターフェースを表示する
参考:投稿や固定ページのようなビルトイン(WordPress に最初から組み込まれている)投稿タイプは、意図的に false に設定されている。
show_in_nav_menus
真偽値) (オプション) ナビゲーションメニューでこの投稿タイプが選択可能かどうか。
初期値: public 引数の値
show_in_menu
真偽値|文字列) (オプション) 管理画面にこの投稿タイプを表示するかどうか。表示するには show_uitrue でなければならない。
初期値: show_ui 引数の値
  • 'false' - 管理画面に表示しない
  • 'true' - 管理画面のトップレベルのメニューとして表示する
  • 'メニューの文字列' - 'tools.php' や 'edit.php?post_type=page' のようなトップレベルのページを指定すると、この投稿タイプをそのサブメニューに配置する。
参考: あるプラグインが作成するメニューページのサブメニューとなるように 'メニューの文字列' を指定すると、この項目はサブメニューの最初の項目になると共に、トップレベルのリンク先を置き換える。そうしたくない場合は、プラグインが admin_menu にメニュー表示アクションをフックする add_action を実行するとき、優先度に 9 以下を指定する必要がある。
参考: この引数は show_ui の値をデフォルトとするが、それ自体のデフォルト値である public に基づく(投稿タイプがパブリックに利用可能である場合には管理画面に表示する)と考えるのが最もわかりやすい。少なくとも、これはビルトインの投稿タイプである postpage に該当する。
show_in_admin_bar
真偽値) (オプション) この投稿タイプを WordPress の管理バーから使えるようにするかどうか。
初期値: show_in_menu 引数の値
menu_position
整数) (オプション) この投稿タイプが表示されるメニューの位置。表示するには show_in_menutrue でなければならない。
初期値: null - デフォルトは「コメントの下」
  • 5 - 投稿の下
  • 10 - メディアの下
  • 15 - リンクの下
  • 20 - 固定ページの下
  • 25 - コメントの下
  • 60 - 最初の区切りの下(コメントの下に区切りがある)
  • 65 - プラグインの下
  • 70 - ユーザーの下
  • 75 - ツールの下
  • 80 - 設定の下
  • 100 - 二つ目の区切りの下(設定の下に区切りがある)
menu_icon
文字列) (オプション) このメニューで使用するアイコンの URL、または Dashicons のアイコンの名前。
初期値: null - デフォルトは投稿アイコン
用例
  • 'dashicons-video-alt'Dashicons のビデオアイコンを使う)
  • 'get_template_directory_uri() . "images/cutom-posttype-icon.png"' (現在のテーマに含まれているイメージを使う)
capability_type
文字列|配列) (オプション) 閲覧/編集/削除の権限を構築する文字列。権限を構築するベースにこの引数を使う場合、配列を指定すると複数形の名前を変更できる。例えば array('story', 'stories') を指定すると、最初の要素が単数形の権限、二番目が複数形の権限として使われる。これは、配列を指定しない場合に自動生成される名前("storys" になる筈)の代わりになる。'capabilities' パラメータによって明示的にセットされなければ、この 'capability_type' パラメータが権限構築のベースとして使われる。これを有効にするには `map_meta_cap` を true にする必要がある。
初期値: "post"
使用できる権限タイプの幾つか(たぶん網羅したリストではない):
  • post (デフォルト)
  • page
これらのビルトイン(組み込み済み)タイプは使用できない:
  • attachment
  • mediapage
capabilities
配列) (オプション) この投稿タイプの権限の配列。
初期値: capability_type を使って構築される
デフォルトでは、権限の配列に 7 種類のキーを入れることができる:
  • edit_post, read_post, それと delete_post - これら 3 つはメタ権限であり、通常はコンテキストに応じて、対応する基本権限に変換される。コンテキストは例えば、編集/閲覧/削除される投稿(post)と、チェックされるユーザーまたは権限グループ(role)で決まる。つまり、これらの権限は通常、ユーザーや権限グループに対して直接に許可されるものではない。
  • edit_posts - この投稿タイプのオブジェクトの編集可否を制御する。
  • edit_others_posts - この投稿タイプの、他のユーザーが所有するオブジェクトの編集可否を制御する。投稿タイプが投稿者をサポートしなければ、これは edit_posts と同様に振る舞う。
  • publish_posts - この投稿タイプのオブジェクトの公開可否を制御する。
  • read_private_posts - プライベートなオブジェクトの閲覧可否を制御する。
参考:後の 4 つは基本権限であり、WordPress コアのいろいろな箇所でチェックされる。
さらに 7 種類の基本権限があるが、それらは map_meta_cap() を除く WordPress コアでは直接参照されない。map_meta_cap() は、最初に説明した 3 つのメタ権限を受け取り、コンテキストによってユーザーや権限グループに対してチェックされる一つ以上の基本権限へ変換する。下記の権限は map_meta_cap() の中でのみ使われる。そのため、下記の権限は 'map_meta_cap' 引数を true にして(デフォルトは false)投稿タイプを登録したときにデフォルトで割り当てられる。
  • read - この投稿タイプのオブジェクトの閲覧可否を制御する。
  • delete_posts - この投稿タイプのオブジェクトの削除可否を制御する。
  • delete_private_posts - プライベートなオブジェクトの削除可否を制御する。
  • delete_published_posts - 公開されているオブジェクトの削除可否を制御する。
  • delete_others_posts - 他のユーザーが所有するオブジェクトの削除可否を制御する。投稿タイプが投稿者をサポートしなければ、これは delete_posts と同様に振る舞う。
  • edit_private_posts - プライベートなオブジェクトの編集可否を制御する。
  • edit_published_posts - 公開されているオブジェクトの編集可否を制御する。

例えば、ある 'capability_type' を割り当てた後に $GLOBALS['wp_post_types']['カスタム投稿タイプ画名'] 配列の中を見ると、次のような値が見えるでしょう:

[cap] => stdClass Object
(
	[edit_post]		 => "edit_{$capability_type}"
	[read_post]		 => "read_{$capability_type}"
	[delete_post]		 => "delete_{$capability_type}"
	[edit_posts]		 => "edit_{$capability_type}s"
	[edit_others_posts]	 => "edit_others_{$capability_type}s"
	[publish_posts]		 => "publish_{$capability_type}s"
	[read_private_posts]	 => "read_private_{$capability_type}s"
        [delete_posts]           => "delete_{$capability_type}s"
        [delete_private_posts]   => "delete_private_{$capability_type}s"
        [delete_published_posts] => "delete_published_{$capability_type}s"
        [delete_others_posts]    => "delete_others_{$capability_type}s"
        [edit_private_posts]     => "edit_private_{$capability_type}s"
        [edit_published_posts]   => "edit_published_{$capability_type}s"
)

参考: "s" は(名前が)複数形の権限の末尾に付きます。

map_meta_cap
真偽値) (オプション) WordPress が持つデフォルトのメタ権限処理を使用するかどうか。
初期値: null
参考:false を指定すると admin 権限グループのユーザーは投稿タイプを編集できなくなります。その場合は edit_post 権限をすべての権限グループ(投稿タイプを追加または編集する)へ追加しなければなりません。
hierarchical
真偽値) (オプション) この投稿タイプが階層を持つ(例:固定ページ)かどうか。true の場合、親を指定できるようになる。編集ページに親を選択するボックスを表示するために、'supports' パラメータに 'page-attributes' を含めなければならない。
初期値: false
参考:このパラメータは元々固定ページのために用意された。もし多数のエントリーを作る(ざっと 100 を超えるような)つもりなら、メモリー不足の問題が発生するだろう。このパラメータを true にすると、その投稿タイプの管理画面を表示するときに、WordPress はその投稿タイプのすべてのエントリーをすべてのメタデータと一緒に取得するから。
supports
配列|真偽値) (オプションadd_post_type_support()/en を直接呼び出すエイリアス。バージョン 3.5 以降では、配列の代わりに真偽値 false を指定することによりデフォルトの動作(title と editor)を止めることができる。
初期値: title と editor
  • 'title' (タイトル)
  • 'editor' (内容の編集)
  • 'author' (作成者)
  • 'thumbnail' (アイキャッチ画像。現在のテーマが post-thumbnails をサポートしていること)
  • 'excerpt' (抜粋)
  • 'trackbacks' (トラックバック送信)
  • 'custom-fields' (カスタムフィールド)
  • 'comments' (コメントの他、編集画面にコメント数のバルーンを表示する)
  • 'revisions' (リビジョンを保存する)
  • 'page-attributes' (メニューの順序。「親〜」オプションを表示するために hierarchical が true であること)
  • 'post-formats' (投稿のフォーマットを追加。投稿フォーマットを参照)
参考:アイキャッチ画像を使用できるカスタム投稿タイプを使うときは、テーマがアイキャッチ画像をサポートしているか、または add_theme_support() を呼び出しているかチェックすること。
register_meta_box_cb
callback) (オプション) 編集フォームのメタボックスをセットアップするのに呼び出すコールバック関数を指定する(関数名を文字列で指定)。コールバック関数は 1 つの引数 $post (現在編集中の投稿の WP_Post オブジェクト)を受け取る。コールバックの中では remove_meta_box()/enadd_meta_box() を呼び出す。
初期値: なし
taxonomies
配列) (オプション) この投稿タイプで使用する、登録されたタクソノミーの配列(categorypost_tag など)。register_taxonomy_for_object_type() を直接呼び出す代わりに使用可能。タクソノミー(カスタム分類)は register_taxonomy() で登録する必要がある。
初期値: タクソノミー無し
has_archive
真偽値|文字列) (オプション) この投稿タイプのアーカイブを有効にする。デフォルトでは、アーカイブのスラッグとして $post_type が使われる。
初期値: false
参考:リライトが有効になっている時は、適切なリライトルールが生成される。rewrite オプションを指定して、使用されるスラッグを変更することもできる。
permalink_epmask
文字列) (オプション) リライト用 endpoint ビットマスクのデフォルト値。詳細は Trac チケット 12605 および Make WordPress Plugins ブログの endpoint を要約した投稿を参照。
初期値: EP_PERMALINK
参考:バージョン 3.4 から、この引数は rewrite'ep_mask' 引数によって置き換えられました。
rewrite
真偽値|配列) (オプション) この投稿タイプのパーマリンクのリライト方法を変更する。リライトを避けるには false を指定する。
初期値: true - $post_type をスラッグに使う
$args 配列
  • 'slug' => 文字列 パーマリンク構造のスラッグを変更。デフォルトは $post_type の値。翻訳可能であること。
  • 'with_front' => 真偽値 Should the permalink structure be prepended with the front base. (例:パーマリンク構造が /blog/ である場合、false ならリンクは /news/、true なら /blog/news/ になる。)デフォルトは true
  • 'feeds' => 真偽値 この投稿タイプについてフィードのパーマリンク構造を作成する。デフォルトは has_archive 引数の値
  • 'pages' => 真偽値 パーマリンク構造をページ送りに対応させる。デフォルトは true
  • 'ep_mask' => 定数 バージョン 3.4 以降 この投稿タイプに endpoint マスクを割り当てる。詳しくは Trac チケット 19275 および Make WordPress Plugins ブログの endpoint を要約した投稿を参照。
    • これを指定せず permalink_epmask がセットされていると、permalink_epmask の値が使われる。
    • これを指定せず permalink_epmask もセットされていなければ、デフォルトの EP_PERMALINK になる。
参考:プラグインの内部で投稿タイプを登録する場合は、有効化と無効化のフック(下記の「有効化するときリライトルールをフラッシュする」を参照)の中で flush_rewrite_rules() を呼び出すこと。もし flush_rewrite_rules() /enを使わない場合は、カスタム投稿タイプが正しいパーマリンク構造を表示するために、管理画面の 設定 > パーマリンク設定 を開いてパーマリンク構造を更新(変更を保存)する必要がある。
query_var
真偽値|文字列) (オプション) この投稿に使用する query_var キーの名前。
初期値: true - $post_type の値
  • 'false' - query_var キーを使用しない。URL 形式のクエリ /?{query_var}={投稿のスラッグ} では表示できない。
  • '文字列' - /?{この引数で指定した文字列}={投稿のスラッグ} で意図したとおり表示される。
参考: 'publicly_queryable' パラメータが false のとき、この query_var パラメータは無効。query_var パラメータを指定するとカスタム投稿タイプのクエリ変数が WordPress の query_var 配列に追加され、認識されるようになる。この配列にないクエリ変数は WordPress によって取り除かれる。
  • true を指定すると、カスタム投稿タイプ(例:book)を次の形式でリクエストできる: example.com/?book=life-of-pi
  • true ではなく文字列を指定すると(例:'publication')次の形式でリクエストできる: example.com/?publication=life-of-pi
can_export
真偽値) (オプション) この投稿タイプをエクスポート可能かどうか。
初期値: true
_builtin
真偽値) (not for general use) この投稿タイプがネイティブ、あるいはビルトインかどうか。 注意: この Codex エントリはドキュメント用です。独自の投稿タイプを登録するときにこれを使わないよう、コア開発者は勧めています。
初期値: false
  • 'false' - デフォルト。これはカスタム投稿タイプ
  • 'true' - これはビルトイン(ネイティブ)の投稿タイプ(post, page, attachment, revision, nav_menu_item)
_edit_link
真偽値) (not for general use) この投稿タイプのエントリを編集するリンク。 注意: この Codex エントリはドキュメント用です。独自の投稿タイプを登録するときにこれを使わないよう、コア開発者は勧めています。
初期値:
  • 'post.php?post=%d'

戻り値

(オブジェクト | WP_Error
登録された投稿タイプのオブジェクト、またはエラーオブジェクト。

用例

"book" というカスタム投稿タイプを登録する例です。

基本形

function codex_custom_init() {
    $args = array(
      'public' => true,
      'label'  => 'Books'
    );
    register_post_type( 'book', $args );
}
add_action( 'init', 'codex_custom_init' );

細かく指定

add_action( 'init', 'codex_book_init' );
/**
 * カスタム投稿タイプ book を登録する。
 *
 * @link http://codex.wordpress.org/Function_Reference/register_post_type
 */
function codex_book_init() {
	$labels = array(
		'name'               => _x( 'Books', 'post type general name', 'your-plugin-textdomain' ),
		'singular_name'      => _x( 'Book', 'post type singular name', 'your-plugin-textdomain' ),
		'menu_name'          => _x( 'Books', 'admin menu', 'your-plugin-textdomain' ),
		'name_admin_bar'     => _x( 'Book', 'add new on admin bar', 'your-plugin-textdomain' ),
		'add_new'            => _x( 'Add New', 'book', 'your-plugin-textdomain' ),
		'add_new_item'       => __( 'Add New Book', 'your-plugin-textdomain' ),
		'new_item'           => __( 'New Book', 'your-plugin-textdomain' ),
		'edit_item'          => __( 'Edit Book', 'your-plugin-textdomain' ),
		'view_item'          => __( 'View Book', 'your-plugin-textdomain' ),
		'all_items'          => __( 'All Books', 'your-plugin-textdomain' ),
		'search_items'       => __( 'Search Books', 'your-plugin-textdomain' ),
		'parent_item_colon'  => __( 'Parent Books:', 'your-plugin-textdomain' ),
		'not_found'          => __( 'No books found.', 'your-plugin-textdomain' ),
		'not_found_in_trash' => __( 'No books found in Trash.', 'your-plugin-textdomain' )
	);

	$args = array(
		'labels'             => $labels,
		'public'             => true,
		'publicly_queryable' => true,
		'show_ui'            => true,
		'show_in_menu'       => true,
		'query_var'          => true,
		'rewrite'            => array( 'slug' => 'book' ),
		'capability_type'    => 'post',
		'has_archive'        => true,
		'hierarchical'       => false,
		'menu_position'      => null,
		'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
	);

	register_post_type( 'book', $args );
}

メッセージをカスタマイズ

add_filter( 'post_updated_messages', 'codex_book_updated_messages' );
/**
 * Book を更新するときのメッセージ。
 *
 * See /wp-admin/edit-form-advanced.php
 *
 * @param array $messages 元の投稿更新メッセージ。
 *
 * @return array カスタム投稿タイプ用に修正した更新メッセージ。
 */
function codex_book_updated_messages( $messages ) {
	$post             = get_post();
	$post_type        = get_post_type( $post );
	$post_type_object = get_post_type_object( $post_type );

	$messages['book'] = array(
		0  => '', // 未使用。メッセージはインデックス 1 番から始まる。
		1  => __( 'Book updated.', 'your-plugin-textdomain' ),
		2  => __( 'Custom field updated.', 'your-plugin-textdomain' ),
		3  => __( 'Custom field deleted.', 'your-plugin-textdomain' ),
		4  => __( 'Book updated.', 'your-plugin-textdomain' ),
		/* 翻訳する方へ: %s はリビジョンの日付と時刻 */
		5  => isset( $_GET['revision'] ) ? sprintf( __( 'Book restored to revision from %s', 'your-plugin-textdomain' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
		6  => __( 'Book published.', 'your-plugin-textdomain' ),
		7  => __( 'Book saved.', 'your-plugin-textdomain' ),
		8  => __( 'Book submitted.', 'your-plugin-textdomain' ),
		9  => sprintf(
			__( 'Book scheduled for: <strong>%1$s</strong>.', 'your-plugin-textdomain' ),
			// 翻訳する方へ: 公開ボックスの日付フォーマット。 http://php.net/date を参照。
			date_i18n( __( 'M j, Y @ G:i', 'your-plugin-textdomain' ), strtotime( $post->post_date ) )
		),
		10 => __( 'Book draft updated.', 'your-plugin-textdomain' )
	);

	if ( $post_type_object->publicly_queryable ) {
		$permalink = get_permalink( $post->ID );

		$view_link = sprintf( ' <a href="%s">%s</a>', esc_url( $permalink ), __( 'View book', 'your-plugin-textdomain' ) );
		$messages[ $post_type ][1] .= $view_link;
		$messages[ $post_type ][6] .= $view_link;
		$messages[ $post_type ][9] .= $view_link;

		$preview_permalink = add_query_arg( 'preview', 'true', $permalink );
		$preview_link = sprintf( ' <a target="_blank" href="%s">%s</a>', esc_url( $preview_permalink ), __( 'Preview book', 'your-plugin-textdomain' ) );
		$messages[ $post_type ][8]  .= $preview_link;
		$messages[ $post_type ][10] .= $preview_link;
	}

	return $messages;
}

コンテキストヘルプを付ける

// Books のコンテキストヘルプを表示する

function codex_add_help_text( $contextual_help, $screen_id, $screen ) {
  //$contextual_help .= var_dump( $screen ); // $screen->id を確かめるのに使う
  if ( 'book' == $screen->id ) {
    $contextual_help =
      '<p>' . __('Things to remember when adding or editing a book:', 'your_text_domain') . '</p>' .
      '<ul>' .
      '<li>' . __('Specify the correct genre such as Mystery, or Historic.', 'your_text_domain') . '</li>' .
      '<li>' . __('Specify the correct writer of the book.  Remember that the Author module refers to you, the author of this book review.', 'your_text_domain') . '</li>' .
      '</ul>' .
      '<p>' . __('If you want to schedule the book review to be published in the future:', 'your_text_domain') . '</p>' .
      '<ul>' .
      '<li>' . __('Under the Publish module, click on the Edit link next to Publish.', 'your_text_domain') . '</li>' .
      '<li>' . __('Change the date to the date to actual publish this article, then click on Ok.', 'your_text_domain') . '</li>' .
      '</ul>' .
      '<p><strong>' . __('For more information:', 'your_text_domain') . '</strong></p>' .
      '<p>' . __('<a href="http://codex.wordpress.org/Posts_Edit_SubPanel" target="_blank">Edit Posts Documentation</a>', 'your_text_domain') . '</p>' .
      '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>', 'your_text_domain') . '</p>' ;
  } elseif ( 'edit-book' == $screen->id ) {
    $contextual_help =
      '<p>' . __('This is the help screen displaying the table of books blah blah blah.', 'your_text_domain') . '</p>' ;
  }
  return $contextual_help;
}
add_action( 'contextual_help', 'codex_add_help_text', 10, 3 );

ヘルプタブ(WordPress 3.3 以降)を付ける

function codex_custom_help_tab() {

  $screen = get_current_screen();

  // 投稿タイプが book でなければ早々にリターン。
  if ( 'book' != $screen->post_type )
    return;

  // ヘルプタブの引数を準備する。
  $args = array(
    'id'      => 'you_custom_id', // タブのユニークな ID
    'title'   => 'Custom Help', // タブのユニークなタイトル(表示される)
    'content' => '<h3>Help Title</h3><p>Help content</p>',  // ヘルプ本文
  );
  
  // ヘルプタブを追加する。
  $screen->add_help_tab( $args );

}

add_action('admin_head', 'codex_custom_help_tab');

有効化するときリライトルールをフラッシュする

パーマリンクを正しく働かせるには、プラグインを有効化するとき、下記の例のように register_activation_hook のコールバックの中から my_cpt_init (カスタム投稿タイプを登録する自作の関数)を呼び出すことに注意してください:

add_action( 'init', 'my_cpt_init' );
function my_cpt_init() {
    register_post_type( ... );
}

function my_rewrite_flush() {
    // 最初に、上記の関数(my_cpt_init)でカスタム投稿タイプ(CPT)を「追加」する。
    // 注意:ここで「追加」と括弧を付けて書いたのは、まだ CPT がデータベースに登録されないため。
    // 後ほど、この CPT の投稿を追加したときに初めて
    // 投稿エントリーの post_type カラム(データベースの列)からのみ CPT が参照される。
    my_cpt_init();

    // 重要:下記はこの例のプラグイン有効化フックの中で *のみ* 実行される!
    // これをページ読み込みの度に呼び出すことは *絶対に行ってはならない*!!
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'my_rewrite_flush' );

テーマの場合は、代わりに after_switch_theme フックを使います。次のように:

add_action( 'init', 'my_cpt_init' );
function my_cpt_init() {
    register_post_type( ... );
}

function my_rewrite_flush() {
    flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'my_rewrite_flush' );

参考

  • public 属性はオプションですが、register_post_type() の引数が そのまま get_post_types() 関数によって取得されます。そのため、もし publicly_queriable, show_ui, show_in_nav_menus, および exclude_from_search をそれぞれ true にセットしても(public のデフォルトは false なので)、public 属性を true にした場合と同じ結果になりません。bug 18950 を参照してください。

変更履歴

  • 3.5.0: 'supports' 引数を真偽値 false にセットすると、デフォルトで有効な title と editor を無効化できるようになりました。
  • 2.9 から導入されました。

ソースファイル

register_post_type()wp-includes/post.php にあります。

リソース

生成ツール

プラグイン


投稿タイプ: register_post_type(), add_post_type_support(), remove_post_type_support(), post_type_supports(), post_type_exists(), set_post_type(), get_post_type(), get_post_types(), get_post_type_object(), get_post_type_capabilities(), get_post_type_labels(), is_post_type_hierarchical(), is_post_type_archive(), post_type_archive_title()


関数リファレンステンプレートタグ目次もご覧ください。


最新英語版: WordPress Codex » Function Reference/register_post_type最新版との差分