カスタム投稿タイプの追加
デフォルトで用意されている「投稿」「固定ページ」の他にもカスタム投稿タイプを追加することで新たな種類のデータを登録することが可能です。
なぜカスタム投稿タイプを設定するか?
カスタム投稿タイプの作成は、通常の投稿とは別のテンプレートで
- 投稿タイプの一覧ページ
- 投稿タイプの個別ページ
を表示するために行います。 例えば、通常の投稿を企業ブログとして利用し、
- 「商品」
- 「プレスリリース」
といった個別の投稿タイプを用意することで それぞれ異なるレイアウトのデザインを採用することが可能です。 例えば商品については画像を多用したデザイン、 プレスリリースについては印刷物をイメージしたシンプルなデザインを利用するなどが挙げられるでしょう。さらにカスタムフィールドと組み合わせることで、投稿タイプごとに利用するフィールドを決めておくような使い方が可能です。
カスタム投稿タイプの追加方法
続いて、カスタム投稿タイプを追加するための方法について見ていきましょう。
1. functions.phpを利用した追加
まず、functions.phpに下記のように追記します。(今回は商品を表す、zero_productsという投稿タイプを追加しています。)
functions.php
add_action( 'init', function () {
register_post_type( 'zero_products', [ // 投稿タイプ名の定義
'labels' => [
'name' => '商品', // 管理画面上で表示する投稿タイプ名
'singular_name' => 'product', // カスタム投稿の識別名
],
'public' => true, // 投稿タイプをpublicにする。管理画面から使えるように。
'has_archive' => true, // アーカイブ機能ON/OFF
'menu_position' => 5, // 管理画面上での配置場所
'hierarchical' => false, // 階層構造は利用しない
'supports' => array(
'title', // タイトルを利用する
'editor', // 内容の編集
'author', // 投稿者
'thumbnail', // アイキャッチ画像
'excerpt', // 抜粋
'trackbacks', //トラックバック
'custom-fields', // カスタムフィールド
'comments', // コメント
'revisions', // リビジョン
'page-attributes', //メニューの順序
'post-formats', //投稿フォーマット
),
]);
});
投稿タイプ名について
投稿タイプ名については、
- 文字数制限の20文字以内に収める
- テンプレートなどで特殊な意味を持つため、ハイフンを使わない
- デフォルトのテンプレートと区別しやすいよう、テーマ独自の接頭辞をつける
などの配慮が必要です。
menu_positionについて
メニューポジションに設定する値によって、ダッシュボード上のメニューで表示される位置が以下のように変化します。確認しておきましょう。
- 5 - 投稿の下
- 10 - メディアの下
- 15 - リンクの下
- 20 - 固定ページの下
- 25 - コメントの下
- 60 - 最初の区切りの下(コメントの下に区切りがある)
- 65 - プラグインの下
- 70 - ユーザーの下
- 75 - ツールの下
- 80 - 設定の下
- 100 - 二つ目の区切りの下(設定の下に区切りがある)
hierarchical について
hierarchical はもともと固定ページの親子関係を反映させるために作成されたものです。階層構造を持たせるためにはこの項目をtrueにする必要がありますが、その場合、追加したカスタム投稿タイプの投稿数が多くなって来ると動作が重くなる可能性が高くなります。基本はfalseに設定しておきましょう。
supportsについて
supportsに設定する配列は、投稿画面で利用する設定項目です。
- 'title' — タイトル
- 'editor' — 本文のエディタ
- 'author' — 作成者
- 'thumbnail' — アイキャッチ画像
- 'excerpt' — 抜粋
- 'trackbacks' — トラックバック送信
- 'custom-fields' — カスタムフィールド
- 'comments' — ディスカッション
- 'revisions' — リビジョン
- 'page-attributes' — 属性(親・順序)
といった内容を表しています。 各行のコメントアウトなどを行なって、対応関係を調べておくと良いでしょう。利用しない設定項目については含めなくて構いません。
そのほかの設定について
カスタム投稿タイプの設定には他にも数多くのオプションが存在します。Codexを利用して、どのようなオプションが存在しているか確認しておきましょう。
Wordpress Codex: register_post_type
2. プラグインを利用したカスタム投稿タイプの追加
「Custom Post Type UI」というプラグインを利用することによって、functions.phpに手を加えずに管理画面から簡単にカスタム投稿タイプを作成することが可能です。(CPT UIと略されます。)
なお、このプラグインはカスタムタクソノミーの設定にも利用可能です。後ほどカスタムタクソノミーの設定方法と合わせてプラグインの利用方法をお伝えします。
カスタム投稿タイプ設定方法の使い分け
カスタム投稿タイプの設定方法には
- functions.phpを利用する方法
- プラグインを利用する方法
の2種類があります。
- テーマ特有のカスタム投稿タイプとして定義したい場合はfunctions.phpで定義
- テーマに関わらず、設定したカスタム投稿タイプを利用したい場合はプラグインで定義
と使い分けていただくと良いでしょう。
パーマリンク設定について
上記のfunctions.phpの書き込みによって、カスタム投稿タイプが定義され、ダッシュボードから投稿できるようになりますが、実際に個別の投稿ページを開こうとするとリンク切れ(404)になってしまいます。
これは、カスタム投稿タイプに対応するパーマリンクの設定が完了していないことが原因です。カスタム投稿タイプを追加した場合には、ダッシュボードから「設定 > パーマリンク設定」の画面に移動し「変更の保存」のボタンを押す必要があります。
これにより、カスタム投稿タイプのパーマリンク設定が完了します。 (現時点では商品ページ向けのテンプレートが作成されていないため、エラー表示となります。)
カスタム投稿タイプ向けのページテンプレート
カスタム投稿タイプ向けのページテンプレートは
- archive-[カスタム投稿タイプ名].php
- single-[カスタム投稿タイプ名].php
で作成します。
single-[カスタム投稿タイプ名].phpで個別ページを作成
single-[カスタム投稿タイプ名].phpを作成してみましょう。
single-zero_products.php
<?php
//ヘッダーを取得
get_header();
while(have_posts() === true){
the_post();
get_template_part('templates/content', 'zero_products');
}
get_footer();
さらに、コンテンツ部分のテンプレートに手を加えます。
content-zero_products
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="post__header">
<!--パーマリンク不要-->
<h2>
<?php the_title(); ?>
</h2>
</header>
<?php if( has_post_thumbnail() ) { ?>
<!--サムネイルを表示-->
<?php the_post_thumbnail(); ?>
<?php } ?>
<section class="post__content">
<p><?php the_content(); ?></p>
</section>
<footer class="post__footer">
<!--商品ページではコメントを利用しない-->
</footer>
</article><!-- #post-<?php the_ID(); ?> -->
商品に関しては、コメントを利用しない形式に設定しています。
さらなるカスタマイズ
- カスタム投稿タイプ
- カスタムフィールド
- カスタム投稿タイプ向けのテンプレート
を組み合わせることで、さらに発展したカスタマイズが可能です。 後の章で、これらを利用したカスタマイズについて紹介します。