22:00よりサイトのメンテナンスを開始します×

エーデルハーツ

Custom WordPress Support & Development

WordPress開発者向けチートシート:register_post_type 主要パラメータ詳解

WordPress開発者向けチートシート:register_post_type 主要パラメータ詳解

WordPressの大きな魅力の一つは、ブログ記事(投稿)や固定ページといったデフォルトのコンテンツタイプ以外に、独自の「カスタム投稿タイプ」を作成できる柔軟性です。例えば、「商品」「イベント」「お知らせ」「ポートフォリオ作品」など、サイトの目的に合わせた専用のコンテンツ管理機能を追加できます。これを実現するのがregister_post_type()関数です。

register_post_type()関数には多くのパラメータがあり、これらを理解し使いこなすことで、カスタム投稿タイプの振る舞いや管理画面での表示を細かく制御できます。この記事では、その主要なパラメータをチートシート形式で徹底解説します。

register_post_type() の基本的な使い方

カスタム投稿タイプは、通常テーマのfunctions.phpまたはプラグインファイル内で、initアクションフックに掛けて登録します。これは、WordPressのコア機能や他のプラグインがロードされた後、かつ他の多くの処理が始まる前に実行されるため、最適なタイミングとされています。

カスタム投稿タイプを登録する際、第一引数にはユニークな投稿タイプスラッグ(半角英数字とアンダースコア、ハイフンのみ、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',
'with_front' => false )
supports ★★★★★
この投稿タイプがサポートする機能を配列で指定します。
array or false array( 'title', 'editor' ) array( 'title', 'editor',
'author', 'thumbnail',
'excerpt', 'comments',
'custom-fields', 'revisions',
'page-attributes'
(hierarchical=true時) )

など
menu_position ★★★☆☆
管理画面のメインナビゲーションメニュー内での表示位置を数値で指定します。
integer null (投稿の下) 5 (投稿の下), 20 (固定ページの下), 100 (区切り線の下)
menu_icon ★★★★☆
管理画面メニューに表示されるアイコン。Dashiconsのクラス名、SVGデータURI、または画像URLを指定できます。
string null (デフォルトアイコン) 'dashicons-products', 'data:image/svg+xml;base64,
YOUR_SVG_CODE'
show_ui ★★★★☆
管理画面のUI(メニュー、編集画面など)を表示するかどうか。publictrueなら通常true
boolean publicの値 true, false
show_in_menu ★★★★☆
管理画面のメインメニューに表示するかどうか。show_uitrueの場合に有効。文字列で親メニュースラッグを指定するとサブメニューにできます。
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_typepostpageでない場合はtrueが推奨されることも。
boolean false true, false
taxonomies ★★★★☆
この投稿タイプに関連付ける既存のタクソノミー(例: category, post_tag)を配列で指定します。
array (空配列) array('category',
'post_tag',
'my_custom_taxonomy')
publicly_queryable ★★★★☆
フロントエンドでこの投稿タイプのクエリ(例: example.com/?post_type=product やパーマリンク経由)を許可するかどうか。
boolean publicの値 true, false
exclude_from_search ★★★☆☆
WordPressの標準のサイト内検索結果からこの投稿タイプの記事を除外するかどうか。publicly_queryabletrueでも、検索からは除外したい場合に。
boolean publicfalseなら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)」の登録例です。

よくある質問 (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顧問エンジニアサービスをご検討くださいね。