カスタム投稿タイプの登録

WordPress には、デフォルトで5つの投稿タイプが用意されています: postpageattachmentrevisionmenu です。

プラグインを開発する際に、独自のコンテンツタイプを作成する必要があるかもしれません。たとえば、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 サイトに対応する短い接頭辞をつけることが重要です。

現在のデータベースの VARCHAR 型フィールド、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 のような一般的なスラッグを使用すると、他のプラグインやテーマと競合する可能性があるため、よりコンテンツに特化したものを使用するようにしましょう。
カスタム投稿タイプの識別子とは異なり、スラッグの重複問題は、競合する投稿タイプの1つのスラッグを変更することで、簡単に解決できます。

プラグインの作者が引数に apply_filters() コールを含んでいた場合、register_post_type() 関数を介して、送信された引数をオーバーライドすることでプログラム的に行うことができます。

原文 / 日本語訳

s
検索
c
新規投稿を作成する
r
返信
e
編集
t
ページのトップへ
j
次の投稿やコメントに移動
k
前の投稿やコメントに移動
o
コメントの表示を切替
esc
投稿やコメントの編集をキャンセル