WordPressのカスタム投稿タイプとは?
カスタム投稿タイプは、デフォルトで存在する投稿タイプ以外の投稿タイプのことを指します。
例えば、WordPressにはデフォルトとして以下の投稿タイプがあります。
- 投稿
- 固定ページ
- メディア
カスタム投稿タイプを作成するメリット
コンテンツの管理が容易になることです。
特にWordPressのテーマ開発者にとって、顧客の要望通りのサイト設計をで大変役に立つ技術です。
カスタム投稿タイプと合わせて、カスタムフィールドを利用することが多くなるかと思います。
カスタム投稿タイプを作成するデメリット
カスタム投稿タイプの表示に、WordPressの専門的知識が必要となる点です。
カスタム投稿タイプの作成は簡単にできますが、表示を行うためにテンプレートファイルの作成や編集が必要になります。
そのため、使い方を間違うとエラーが発生してしまい、トラブルの元となっていしまいます。
ブロガーやDIYユーザーがカスタム投稿タイプを一から覚えて使うなら、目的にあったテーマを探して使用する方がいいでしょう。
カスタム投稿タイプの使い方
カスタム投稿タイプを使うためには、次の手順が必要です。
- カスタム投稿タイプの作成
- カスタム投稿タイプの表示を行うためのテンプレート編集
これらの手順について解説していきます。
カスタム投稿タイプの作成方法
WordPressでカスタム投稿タイプを作成するには、プラグインで作成する方法と手動で作成する方法があります。
まずは簡単にできるプラグインで作成する方法を解説していきます。
プラグインで作成する方法
カスタム投稿タイプを作成できるおすすめのプラグインは、Custom Post Type UIです。
手動で作成する方法
カスタム投稿タイプを手動で作成するには、register_post_type
関数を使用します。
関数のメソッド内で、register_post_type
関数を呼び出します。そして、register_post_type
関数を呼び出している関数をinit
フックで呼び出します。
DIYユーザーであれば、上記の関数などが記載してあるコードスニペットをfunctions.php
などで呼び出すことが基本となります。
実際のコードを例にどのように関数を記載するのかみていきます。
必要最低限の記載例
register_post_type
関数の必須パラメータのみを記載した場合、次のようなコードでカスタム投稿タイプを作成できます。
add_action('init', 'create_post_types');
function create_post_types() {
register_post_type('event');
}
一般的な記載例
しかし、必須パラメータのみの記載だと管理がしにくいので、オプションのパラメータを追加することが一般的です。
add_action('init', 'create_post_types');
function create_post_types() {
register_post_type('event', array(
'labels' => array(
'name' => 'イベント',
'add_new_item' => '新規イベントを追加',
'edit_item' => 'イベントを編集',
'all_items' => 'イベント一覧',
'singular_name' => 'イベント'
),
'public' => true,
'has_archive' => true
));
}
必要に応じて、オプションとなるパラメータを設定しましょう。
カスタム投稿タイプを表示する手順
カスタム投稿タイプは作成しただけでは、サイトの訪問者に向けて表示することができません。
表示を行うためには、テンプレートファイルの編集が必要となります。
カスタム投稿タイプを作成する
まずはカスタム投稿タイプを作成します。
カスタム投稿タイプを作成するには、前述したようにプラグインで作成する方法および手動で作成する方法があります。
今回は手動でカスタム投稿タイプを作成し、必須プラグイン化を行います。
<?php
add_action('init', 'create_post_types');
function create_post_types() {
register_post_type('glossary', array(
'labels' => array(
'name' => '用語集',
'add_new_item' => '新規用語追加',
'edit_item' => '用語編集',
'all_items' => '用語一覧',
'singular_name' => '用語'
),
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'excerpt', 'custom-fields', 'genesis-seo', 'genesis-scripts', 'genesis-layouts'),
'menu_icon' => 'dashicons-book'
));
}
カスタム投稿タイプを表示できるようにテンプレートを作成または編集する
作成したカスタム投稿タイプを表示するために、テンプレートファイルの作成または編集を行います。
今回は、テンプレートファイルの新規作成を行い、作成したカスタム投稿タイプの表示を行います。
作成するテンプレートファイル名はsingle-glossary.php
です。
テンプレート階層の優先順位に基づいて、作成するテンプレートファイル名を決めます。
エディターで記載した内容を表示したいだけであれば、single.php
の内容をコピペするだけで問題ありません。
例えば、single.php
に内容が次のようであれば、
<pre class="wp-block-syntaxhighlighter-code">&amp;lt;?php
genesis();</pre>
single-glossary.php
は次のようになります。
<pre class="wp-block-syntaxhighlighter-code">&amp;lt;?php
genesis();</pre>
カスタム投稿タイプを作成した後に確認すべきこと
サイトマップ
プラグインによって、作成したカスタム投稿タイプのサイトマップが含まれない場合があります。
設定内容を確認し、サイトマップに含みたい場合はその設定を行いましょう。
カスタム投稿タイプについてよくある質問
カテゴリーやタグはどうやって追加する?
カスタムタクソノミーを利用します。
投稿(コア)で利用している同じカテゴリーやタグはどうやって使う?
register_post_type
関数のパラメータ$argsの引数taxonomiesを指定します
taxonomiesで指定する値は次のものです。
- カテゴリーを利用する場合→category
- タグを利用する場合→
post_tag
次にカテゴリーのみ、タグのみ、カテゴリーとタグの両方を追加したい場合の具体例をあげます。
カテゴリーのみを利用する場合の記載例:
function register_cpt() {
$args = [
"taxonomies" => [ "category" ]
];
register_post_type( "my_cpt", $args );
}
add_action( 'init', 'register_cpt' );
タグのみを利用する場合の記載例:
function register_cpt() {
$args = [
"taxonomies" => [ "post_tag" ]
];
register_post_type( "my_cpt", $args );
}
add_action( 'init', 'register_cpt' );
カテゴリーとタグを利用する場合の記載例:
function register_cpt() {
$args = [
"taxonomies" => [ "categoroy", "post_tag" ]
];
register_post_type( "my_cpt", $args );
}
add_action( 'init', 'register_cpt' );
参考: