WordPress には、デフォルトで5つの投稿タイプが用意されています: post
、page
、attachment
、revision
、menu
です。
プラグインを開発する際に、独自のコンテンツタイプを作成する必要があるかもしれません。たとえば、e コマースサイトの商品、e ラーニングサイトの課題、レビューサイトのムービーなどです。
カスタム投稿タイプを使用すると、独自の投稿タイプを登録できます。カスタム投稿タイプが登録されると、そのタイプの投稿を管理・作成するための新しいトップレベルの管理画面が表示されます。
新しい投稿タイプを登録するには、register_post_type()
関数を使用します。
以下の最小限の例では、データベースで wporg_product
として識別される、新しい投稿タイプ Products を登録しています。
function wporg_custom_post_type() {
register_post_type('wporg_product',
array(
'labels' => array(
'name' => __('Products', 'textdomain'),
'singular_name' => __('Product', 'textdomain'),
),
'public' => true,
'has_archive' => true,
)
);
}
add_action('init', 'wporg_custom_post_type');
引数の説明は、register_post_type()
のリファレンスページを参照してください。
register_post_type()
は、after_setup_theme
フックの後、admin_init
フックの前、に呼び出す必要があります。使用するフックとしては、init
アクションフックが良いでしょう。
ネーミングのベスト・プラクティス
投稿タイプの関数や識別子には、プラグインやテーマ、Web サイトに対応する短い接頭辞をつけることが重要です。
post_type
のカラム長は20ですので、カスタム投稿タイプの識別子は、20文字を超えないようにしてください。
wp_
を使用しないでください — これは WordPress コアで使用されています。
product
)、同じ識別子を使用している他のプラグインやテーマと競合する可能性があります。
URL
カスタム投稿タイプは、サイトの URL 構造内で独自のスラッグを取得します。
タイプ wporg_product
の投稿は、デフォルトで右に示す URL 構造を使用します: https://example.com/wporg_product/%product_name%
wporg_product
はカスタム投稿タイプのスラッグで、%product_name%
は特定の商品のスラッグです。
最終的なパーマリンクは、こうなります: https://example.com/wporg_product/wporg-is-awesome
カスタム投稿タイプの編集画面では、デフォルトの投稿タイプと同じようにパーマリンクを見ることができます。
カスタム投稿タイプ用のカスタムスラッグ
カスタム投稿タイプのスラッグにカスタムスラッグを設定するには、引数配列 register_post_type()
のキー rewrite
に、KVP (キー => 値 ペア) を追加するだけです。
例:
function wporg_custom_post_type() {
register_post_type('wporg_product',
array(
'labels' => array(
'name' => __( 'Products', 'textdomain' ),
'singular_name' => __( 'Product', 'textdomain' ),
),
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'products' ), // my custom slug
)
);
}
add_action('init', 'wporg_custom_post_type');
上記の結果、URL 構造は次のようになります: https://example.com/products/%product_name%
products
のような一般的なスラッグを使用すると、他のプラグインやテーマと競合する可能性があるため、よりコンテンツに特化したものを使用するようにしましょう。
プラグインの作者が引数に apply_filters()
コールを含んでいた場合、register_post_type()
関数を介して、送信された引数をオーバーライドすることでプログラム的に行うことができます。