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

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

関数リファレンス/register post type

提供: WordPress Codex 日本語版
移動先: 案内検索

投稿タイプを作成または変更します。 この 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最新版との差分