WordPress開発者向けチートシート:register_post_type 主要パラメータ詳解
WordPressの大きな魅力の一つは、ブログ記事(投稿)や固定ページといったデフォルトのコンテンツタイプ以外に、独自の「カスタム投稿タイプ」を作成できる柔軟性です。例えば、「商品」「イベント」「お知らせ」「ポートフォリオ作品」など、サイトの目的に合わせた専用のコンテンツ管理機能を追加できます。これを実現するのがregister_post_type()
関数です。
register_post_type()
関数には多くのパラメータがあり、これらを理解し使いこなすことで、カスタム投稿タイプの振る舞いや管理画面での表示を細かく制御できます。この記事では、その主要なパラメータをチートシート形式で徹底解説します。
register_post_type()
の基本的な使い方
カスタム投稿タイプは、通常テーマのfunctions.php
またはプラグインファイル内で、init
アクションフックに掛けて登録します。これは、WordPressのコア機能や他のプラグインがロードされた後、かつ他の多くの処理が始まる前に実行されるため、最適なタイミングとされています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php function my_custom_post_types_init() { // カスタム投稿タイプ「書籍 (book)」を登録する例 $args = array( 'public' => true, // 一般に公開するかどうか 'label' => '書籍', // 管理画面メニューなどに表示される名前 'rewrite' => array( 'slug' => 'book' ), // パーマリンクのスラッグ 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields' ), // サポートする機能 'menu_icon' => 'dashicons-book', // 管理画面メニューのアイコン 'show_in_rest'=> true, // REST API およびブロックエディタ対応 // 他にも多くのパラメータがあります ); register_post_type( 'book', $args ); // 'book' が投稿タイプスラッグ (識別子) // 複数のカスタム投稿タイプを登録する場合は、ここに追加で register_post_type() を記述 } add_action( 'init', 'my_custom_post_types_init' ); ?> |
カスタム投稿タイプを登録する際、第一引数にはユニークな投稿タイプスラッグ(半角英数字とアンダースコア、ハイフンのみ、20文字以内推奨)を指定し、第二引数には設定オプションを連想配列で渡します。
register_post_type()
で使用できる主要なパラメータ一覧
register_post_type()
の第二引数$args
で使用できる主要なパラメータを機能別に分類しました。各パラメータの説明の冒頭には、その利用頻度や重要度を星の5段階評価で示しています。星の数の目安は以下の通りです。
★★★★★:ほぼ全ての開発で頻繁に利用され、基本かつ非常に重要なパラメータ
★★★★☆:高頻度で利用され、多くの一般的なカスタマイズで役立つ重要なパラメータ
★★★☆☆:中程度の頻度で利用され、特定の機能を実現する際に便利なパラメータ
★★☆☆☆:利用頻度はやや低めですが、特定の要件や細かな制御を行いたい場合に役立つパラメータ
★☆☆☆☆:利用頻度は低く、非常に限定的な状況や高度なカスタマイズでのみ使用されるパラメータ
パラメータ名 | 説明 (重要度/利用頻度) | 型 | デフォルト値 | 設定例 / 備考 |
---|---|---|---|---|
label |
★★★★★ 投稿タイプの単数形の名前。 labels 配列が未設定の場合、他の表示名もこれから自動生成されます。 |
string |
$post_type の値 |
'イベント' , '商品' |
labels |
★★★★★ 管理画面やテーマ内で表示される、この投稿タイプに関する様々なテキストラベルを指定する配列。詳細は後述。 |
array |
label から自動生成 |
下記「labels パラメータの詳細」参照 |
description |
★★★☆☆ 投稿タイプの説明文。管理画面などで表示されることがあります。 |
string |
'' (空文字列) |
'弊社の製品情報を掲載します。' |
public |
★★★★★ この投稿タイプを一般に公開し、管理画面UIやフロントエンドでの表示を制御する包括的なスイッチ。 true にすると多くの関連パラメータ (show_ui , publicly_queryable , exclude_from_search=false , show_in_nav_menus など) が自動的にtrue になります。 |
boolean |
false |
true , false |
hierarchical |
★★★★☆ 投稿タイプを階層構造(親子関係)にするかどうか。固定ページのように振る舞わせたい場合に true にします。 |
boolean |
false |
true (親子関係あり), false (投稿のようなフラット構造) |
has_archive |
★★★★★ この投稿タイプのアーカイブページ (例: example.com/products/ ) を持つかどうか。true にすると、パーマリンク設定の更新後にアーカイブページが生成されます。文字列でスラッグを指定することも可能。 |
boolean or string |
false |
true , 'products-list' (スラッグ指定) |
rewrite |
★★★★☆ パーマリンクの書き換えルールを設定します。配列で詳細な設定(スラッグ、階層構造の反映など)が可能です。 |
boolean or array |
true (投稿タイプスラッグを使用) |
array( 'slug' => 'item', |
supports |
★★★★★ この投稿タイプがサポートする機能を配列で指定します。 |
array or false |
array( 'title', 'editor' ) |
array( 'title', 'editor', など |
menu_position |
★★★☆☆ 管理画面のメインナビゲーションメニュー内での表示位置を数値で指定します。 |
integer |
null (投稿の下) |
5 (投稿の下), 20 (固定ページの下), 100 (区切り線の下) |
menu_icon |
★★★★☆ 管理画面メニューに表示されるアイコン。Dashiconsのクラス名、SVGデータURI、または画像URLを指定できます。 |
string |
null (デフォルトアイコン) |
'dashicons-products' , 'data:image/svg+xml;base64, |
show_ui |
★★★★☆ 管理画面のUI(メニュー、編集画面など)を表示するかどうか。 public がtrue なら通常true 。 |
boolean |
public の値 |
true , false |
show_in_menu |
★★★★☆ 管理画面のメインメニューに表示するかどうか。 show_ui がtrue の場合に有効。文字列で親メニュースラッグを指定するとサブメニューにできます。 |
boolean or string |
show_ui の値 |
true , false , 'edit.php?post_type=page' (固定ページのサブメニューに) |
show_in_nav_menus |
★★★☆☆ 「外観」>「メニュー」で、この投稿タイプの記事をナビゲーションメニュー項目として選択可能にするか。 |
boolean |
public の値 |
true , false |
show_in_admin_bar |
★★★☆☆ 管理バーの「新規追加」メニューにこの投稿タイプを表示するかどうか。 |
boolean |
show_in_menu の値 |
true , false |
show_in_rest |
★★★★★ この投稿タイプをWordPress REST APIで利用可能にするかどうか。ブロックエディタ (Gutenberg) で完全にサポートするためには true が必須です。 |
boolean |
false |
true , false |
rest_base |
★★★☆☆ REST APIのエンドポイントとなるスラッグ。デフォルトは投稿タイプスラッグ。 |
string |
$post_type |
'api-books' |
rest_controller_class |
★★☆☆☆ REST APIのカスタムコントローラクラスを指定。 |
string |
'WP_REST_Posts_Controller' |
'My_Custom_REST_Controller' |
capability_type |
★★★☆☆ 権限を生成する際のベースとなる投稿タイプを指定。通常は 'post' や'page' 、またはカスタム投稿タイプスラッグ。配列で単数形・複数形を指定することも可能。 |
string or array |
'post' |
'event' ,array('story', 'stories') |
capabilities |
★★☆☆☆ この投稿タイプに対する各権限( edit_post , read_post , delete_post など)を詳細にマッピングします。通常はcapability_type から自動生成されるもので十分です。 |
array |
(空配列、capability_type から生成) |
(複雑な権限設定が必要な場合) |
map_meta_cap |
★★☆☆☆true にすると、WordPressはedit_post , delete_post , read_post といったメタ権限を、より原始的な権限に自動的にマッピングします。デフォルトはfalse ですが、capability_type がpost やpage でない場合はtrue が推奨されることも。 |
boolean |
false |
true , false |
taxonomies |
★★★★☆ この投稿タイプに関連付ける既存のタクソノミー(例: category , post_tag )を配列で指定します。 |
array |
(空配列) | array('category', |
publicly_queryable |
★★★★☆ フロントエンドでこの投稿タイプのクエリ(例: example.com/?post_type=product やパーマリンク経由)を許可するかどうか。 |
boolean |
public の値 |
true , false |
exclude_from_search |
★★★☆☆ WordPressの標準のサイト内検索結果からこの投稿タイプの記事を除外するかどうか。 publicly_queryable がtrue でも、検索からは除外したい場合に。 |
boolean |
public がfalse ならtrue 、それ以外はpublic の値とは逆 (ややこしいので注意。public => true なら exclude_from_search のデフォルトはfalse ) |
true (検索から除外), false (検索に含める) |
can_export |
★★★☆☆ WordPressのエクスポートツールで、この投稿タイプのデータをエクスポート対象にするか。 |
boolean |
true |
true , false |
labels
パラメータの詳細
labels
パラメータは、管理画面の様々な場所で表示されるテキストをカスタマイズするための連想配列です。細かく設定することで、ユーザーにとって分かりやすい管理画面を提供できます。
キー | 説明 | 一般的な値の例 (投稿タイプ「書籍」の場合) |
---|---|---|
name |
投稿タイプの複数形の名前。メニューなどで使用。 | '書籍' |
singular_name |
投稿タイプの単数形の名前。 | '書籍' |
add_new |
「新規追加」のテキスト。 | '新規書籍を追加' |
add_new_item |
「新規追加」画面のタイトル。 | '新しい書籍を追加' |
edit_item |
編集画面のタイトル。 | '書籍を編集' |
new_item |
「新規◯◯」のテキスト。 | '新しい書籍' |
view_item |
「表示」リンクのテキスト。 | '書籍を表示' |
view_items |
アーカイブページなどの「表示」テキスト。 | '書籍一覧を表示' |
search_items |
検索ボックスのプレースホルダーなど。 | '書籍を検索' |
not_found |
投稿が見つからなかった場合のメッセージ。 | '書籍が見つかりませんでした。' |
not_found_in_trash |
ゴミ箱に投稿が見つからなかった場合のメッセージ。 | 'ゴミ箱に書籍はありません。' |
parent_item_colon |
階層タイプの場合の親アイテムのラベル。 | '親書籍:' |
all_items |
「すべての◯◯」のテキスト。メニューなどで使用。 | 'すべての書籍' |
archives |
投稿タイプアーカイブのタイトル。 | '書籍アーカイブ' |
attributes |
投稿の属性メタボックスのタイトル。 | '書籍の属性' |
insert_into_item |
メディアアップローダーなどで「◯◯に挿入」のテキスト。 | '書籍に挿入' |
uploaded_to_this_item |
メディアアップローダーなどで「この◯◯にアップロード済み」のテキスト。 | 'この書籍へアップロード済み' |
featured_image |
アイキャッチ画像のメタボックスタイトル。 | '書籍の表紙画像' |
set_featured_image |
アイキャッチ画像設定ボタンのテキスト。 | '表紙画像を設定' |
remove_featured_image |
アイキャッチ画像削除ボタンのテキスト。 | '表紙画像を削除' |
use_featured_image |
アイキャッチ画像の使用方法の説明。 | '表紙として使用' |
menu_name |
管理画面メニューに表示される名前。デフォルトはname の値。 |
'書籍管理' |
name_admin_bar |
管理バーの「新規追加」に表示される名前。デフォルトはsingular_name の値。 |
'書籍' |
サンプルコード: カスタム投稿タイプ「イベント」の登録例
以下は、より多くのパラメータを設定したカスタム投稿タイプ「イベント(event)」の登録例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
<?php function my_register_event_post_type() { $event_labels = array( 'name' => 'イベント', 'singular_name' => 'イベント', 'menu_name' => 'イベント管理', 'name_admin_bar' => 'イベント', 'add_new' => '新規イベントを追加', 'add_new_item' => '新しいイベントを追加', 'new_item' => '新しいイベント', 'edit_item' => 'イベントを編集', 'view_item' => 'イベントを表示', 'all_items' => 'すべてのイベント', 'search_items' => 'イベントを検索', 'parent_item_colon' => '親イベント:', 'not_found' => 'イベントが見つかりませんでした。', 'not_found_in_trash' => 'ゴミ箱にイベントはありません。', 'featured_image' => 'イベントアイキャッチ画像', 'set_featured_image' => 'アイキャッチ画像を設定', 'remove_featured_image' => 'アイキャッチ画像を削除', 'use_featured_image' => 'アイキャッチとして使用', ); $event_args = array( 'label' => 'イベント', 'labels' => $event_labels, 'description' => '地域で開催されるイベント情報を掲載します。', 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'show_in_rest' => true, // REST API およびブロックエディタ対応 'rest_base' => 'events-api', // REST APIのエンドポイントスラッグ 'menu_position' => 5, // 「投稿」の下 'menu_icon' => 'dashicons-calendar-alt', 'capability_type' => 'post', // 'post'の権限タイプを借用 // 'capabilities' => array(), // より詳細な権限設定が必要な場合 'hierarchical' => false, // 階層なし (投稿のような形式) 'supports' => array( 'title',<br> 'editor', 'author',<br> 'thumbnail', 'excerpt',<br> 'custom-fields', 'comments',<br> 'revisions' ), 'taxonomies' => array( 'category', 'post_tag' ), // 既存のカテゴリーとタグを利用可能にする 'has_archive' => true, // アーカイブページ (example.com/events/) を有効に 'rewrite' => array( 'slug' => 'events', 'with_front' => false ), // パーマリンクのスラッグを 'events' に 'can_export' => true, 'exclude_from_search' => false, // サイト内検索に含める ); register_post_type( 'event', $event_args ); } add_action( 'init', 'my_register_event_post_type' ); // パーマリンク設定を更新しないと新しい投稿タイプのURLが正しく機能しない場合があるので注意 // カスタム投稿タイプやカスタムタクソノミーを追加・変更した後は、 // 管理画面の「設定」>「パーマリンク設定」を開き、何も変更せずに「変更を保存」ボタンを押すと、 // リライトルールが再生成されます。 ?> |
よくある質問 (FAQ)
- Q1: カスタム投稿タイプを登録するのに最適なアクションフックは何ですか?
- A1:
init
フックが最適です。このフックはWordPressのコア、プラグイン、テーマがロードされた後、かつヘッダーが送信される前に実行されるため、投稿タイプやタクソノミーを登録するのに適したタイミングです。これより早いタイミングで登録しようとすると、必要な関数が利用できない可能性があります。
- Q2: 登録したカスタム投稿タイプのパーマリンクが404エラーになります。なぜですか?
- A2: カスタム投稿タイプを新しく登録したり、
rewrite
パラメータを変更したりした後は、WordPressのリライトルールを更新する必要があります。最も簡単な方法は、管理画面の「設定」 > 「パーマリンク設定」を開き、何も変更せずに「変更を保存」ボタンをクリックすることです。これにより、リライトルールが再生成され、新しいパーマリンクが正しく機能するようになります。 - Q3: カスタム投稿タイプに、既存のカテゴリーやタグとは別に、専用の分類(タクソノミー)を追加したい場合はどうすればいいですか?
- A3:
register_taxonomy()
関数を使ってカスタムタクソノミーを登録し、register_post_type()
のtaxonomies
パラメータの配列にそのカスタムタクソノミースラッグを追加します。または、register_taxonomy()
の第二引数で関連付ける投稿タイプを指定することもできます。
まとめ
register_post_type()
関数は、WordPressを単なるブログプラットフォームから、あらゆる種類の情報を管理できる柔軟なコンテンツ管理システム(CMS)へと進化させるための強力な武器です。この記事で紹介した主要なパラメータを理解し活用することで、あなたのサイトやプラグインはより構造的で、ユーザーにとっても管理者にとっても使いやすいものになるでしょう。様々なパラメータを試して、カスタム投稿タイプの可能性を最大限に引き出してください。
私たちは、歴史的な風情と新しい活気が共存する街、埼玉県川越市に拠点を置き、WordPressサイトに関するあらゆる技術的課題の解決をお手伝いしています。サイトのカスタマイズ、プラグイン開発、パフォーマンス改善、セキュリティ対策、そして日々の運用サポートまで、お客様のニーズに合わせた最適なソリューションをご提供いたします。
もっとWordPressの技術を磨きたい、あるいは信頼できる技術パートナーをお探しでしたら、WordPress顧問エンジニアサービスをご検討くださいね。