WordPressには5つのデフォルト投稿タイプが用意されています。 post
page
attachment
revision
menu
となっています。
プラグインを開発していると、例えば、eコマースサイトの商品、eラーニングサイトの課題、レビューサイトの映画など、独自の特定のコンテンツタイプを作成する必要が出てきます。
カスタム投稿タイプを使用すると、独自の投稿タイプを登録することができます。
新しい投稿タイプを登録するには、register_post_type()関数を使用します。
カスタム投稿タイプは、テーマではなくプラグインに入れることをお勧めします。
以下の最小の例では、データベースで wporg_product
として識別される新しい投稿タイプ「製品」を登録しています。
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');
Expand full source codeCollapse full source code
引数の説明についてはregister_post_type()のリファレンスページをご覧ください
Warning:
register_post_type()
admin_init
after_setup_theme
フックの後に呼び出す必要があります。
ネーミングのベストプラクティス #ネーミングのベストプラクティス
投稿タイプの関数や識別子には、プラグインやテーマ、ウェブサイトに対応した短いプレフィックスを付けることが重要です
警告。
データベースの カラムは現在その長さの VARCHAR フィールドなので、カスタム投稿タイプの識別子が 20 文字を超えないようにしてください。
警告。
警告:
前方互換性を確保するために、識別子として wp_ を使用しないでください – これは WordPress コアで使用されています。
注意:
重複した投稿タイプの識別子を解決するには、競合する投稿タイプの 1 つを無効にしなければなりません。
トップ
URLs #URLs
カスタム投稿タイプは、サイトの URL 構造内で独自のスラッグを取得します。
タイプ wporg_product
の投稿は、デフォルトで次の URL 構造を使用します。 http://example.com/wporg_product/%product_name%
.
wporg_product
%product_name%
は特定の製品のスラッグです。
このパーマリンクは、デフォルトの投稿タイプと同様に、カスタム投稿タイプの編集画面で確認できます。
A Custom Slug for a Custom Post Type #A Custom Slug for a Custom Post Type
カスタム投稿タイプのスラッグにカスタムスラッグを設定するには、キーを追加するだけです。 キー =>register_post_type()
rewrite
キーに追加するだけです。
例:
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');
Expand full source codeCollapse full source code
以上により、以下のようなURL構造になります。 http://example.com/products/%product_name%
警告です。
注意: products
のような一般的なスラッグを使用すると、他のプラグインやテーマと競合する可能性があるため、よりコンテンツに特化したスラッグを使用するようにしてください。
プラグインの作成者が引数に apply_filters()
register_post_type()
関数を介して送信された引数をオーバーライドすることでプログラム的に行うことができます。