ワードプレスで通常の投稿とは別に「投稿の集まり」を作れる機能であるカスタム投稿タイプ。
カスタム投稿タイプ用にテンプレートを作ってカスタムフィールドの入力のみで記事を作成できたり、カスタムタクソノミーといってカスタム投稿タイプごとに独自のタグやカテゴリーを設けられたりと、WordPressでこれを覚えたらやりたい放題になる機能ですが、そもそも機能を使うのにもちょっと知識が必要だし、カスタム投稿タイプは導入しただけでは通常の記事のように動作しないし、いろいろと設定をしないと検索エンジンクローラーが来てくれない(インデックスされない)など忘れてはいけない設定がたくさんあるので、忘れないように手順を書いておこうと思います。
これだけやればカスタム投稿タイプを100%活用できる!手順です。また、このサイトでもカスタム投稿タイプを使っており、実際に行っている方法になります。
カスタム投稿タイプを作る
これは、コードを自分で書くよりもプラグインに委ねた方がいい。一番有名な「Custom Post Type Ui」を使用すれば簡単にカスタム投稿タイプがいくらでも作れます。
カスタム投稿タイプやカスタムタクソノミー(分類)を簡単に作るプラグイン「Custom Post Type UI」
ちなみにですが、「Custom Post Type UI」でカスタム投稿タイプを作成するとき右側のオプションにある「リライト」という項目を「する」に設定すると、今までの記事をカスタム投稿タイプで作ったタイプへ変更してもきちんとリダイレクトしてくれます。分かりやすく言うと、元の記事アドレスにアクセスしてもきちんと新しいアドレスに変換して表示してくれるということですね。
ソースでは下のコード部分になります
"rewrite" => array( "slug" => "cms", "with_front" => true ),
ただこの処理には限界があって、サイトへのリンク(内部・外部とも)を通常のaタグを使う
<a href=""></a>
とブログカードでのリンクはできないものの、URL自体はリダイレクトしてくれるのでとりあえずリンク切れすることはないのですが、新しいバージョンのワードプレスの場合に追加された、記事のURLを書くとブログカードでのリンクを作ってくれる機能に関してはリンク切れとなってしまうので調整が必要だと思います。
記事として認識するために欠かせないパーマリンク
カスタム投稿タイプをただ単に追加しただけでは、記事を表示したときに「404」エラーが出てしまい表示されません。
WordPressでは新たに記事の集まりを作った場合には必ず「パーマリンク設定の更新」をして、構造をリフレッシュする必要があるようです。特に変更事項はありませんが、
「設定」→「パーマリンク設定」を開き、そのまま何もせず更新するだけで構造がリフレッシュされ、カスタム投稿タイプの記事がちゃんと表示されるようになります。
この後にカスタム投稿タイプ独自のパーマリンク構造を与えたい場合には、「Custom Post Type Permalinks」プラグインで行います。これを使うとパーマリンク設定画面にカスタム投稿タイプ毎のパーマリンク構造設定用の項目が追加されるのでそこで設定するだけです。
記事追加時にping送信させる
通常の投稿なら記事追加時に自動でping送信が行われ、検索エンジンなどに通知されるのですが、カスタム投稿タイプを追加しただけではこの機能が適用されません。以下のコードをfunctions.phpに追加して認識させる必要があります。
function カスタム投稿タイプ名_pings_at_publish( $post_id ) {
wp_schedule_single_event( strtotime( '+10 min' ), 'do_pings', array( $post_id ) );
}
add_action( 'publish_カスタム投稿タイプ名', 'カスタム投稿タイプ名_pings_at_publish', 10, 1 );
functions.phpの直接編集が怖い場合には「code snippets」というプラグインを使うとエラーチェックもしてくれて便利です
RSS情報を追加
記事の更新情報を送信する手立てとして使われるRSSフィード。これもカスタム投稿タイプを導入しただけでは認識してくれないので、以下のコードをfunctions.phpへ追加して実装します。
// functions.php
function myfeed_request($qv) {
if (isset($qv['feed']) && !isset($qv['post_type']))
$qv['post_type'] = array('カスタム投稿タイプ名1', 'カスタム投稿タイプ名2');
return $qv;
}
add_filter('request', 'myfeed_request');
「カスタム投稿タイプ名」のところにカスタム投稿タイプのスラグを入れて完了です。複数のカスタム投稿タイプがある場合は、カンマで区切って増やせば適用されます。
新着記事にカスタム投稿タイプの記事を含める
通常の記事とは別にカスタム投稿タイプ毎の記事一覧を表示してもいいとは思うのですが、どうせなら通常の記事一覧とカスタム投稿タイプの記事を混ぜて表示した方がサイトの新鮮さが伝わるというもの。これを行うには以下のコードをfunctions.phpへ追加して実装します。
function chample_latest_posts( $wp_query ) {
if ( is_home() && ! isset( $wp_query->query_vars['suppress_filters'] ) ) {
$wp_query->query_vars['post_type'] = array('カスタム投稿タイプ名1', 'カスタム投稿タイプ名2');
}
}
add_action( 'parse_query', 'chample_latest_posts' );
コード中の「カスタム投稿タイプ名」となっているところへカスタム投稿タイプのスラグを入れて完了です。複数のカスタム投稿タイプがある場合は、カンマで区切って増やせば適用されます。
カテゴリーアーカイブにカスタム投稿タイプの記事を含める
カスタム投稿タイプを追加した際に今まで使っていたカテゴリーと共有する設定をした場合、カテゴリー一覧ページが表示されたときには投稿もカスタム投稿タイプも混ぜて表示をしたいというときのカスタマイズです。これを行うには以下のコードをfunctions.phpへ追加して実装します。
function add_post_category_archive( $wp_query ) {
if ($wp_query->is_main_query() && $wp_query->is_category()) {
$wp_query->set( 'post_type', array('post','カスタム投稿タイプ名'));
}
}
add_action( 'pre_get_posts', 'add_post_category_archive' , 10 , 1);
コード中の「カスタム投稿タイプ名」となっているところへカスタム投稿タイプのスラグを入れて完了です。複数のカスタム投稿タイプがある場合は、カンマで区切って増やせば適用されます。
タグアーカイブにカスタム投稿タイプの記事を含める
カスタム投稿タイプを追加した際に今まで使っていたタグと共有する設定をした場合、タグ一覧ページが表示されたときには投稿もカスタム投稿タイプも混ぜて表示をしたいというときのカスタマイズです。これを行うには以下のコードをfunctions.phpへ追加して実装します。
function add_post_tag_archive( $wp_query ) {
if ($wp_query->is_main_query() && $wp_query->is_tag()) {
$wp_query->set( 'post_type', array('post','カスタム投稿タイプ名'));
}
}
add_action( 'pre_get_posts', 'add_post_tag_archive' , 10 , 1);
コード中の「カスタム投稿タイプ名」となっているところへカスタム投稿タイプのスラグを入れて完了です。複数のカスタム投稿タイプがある場合は、カンマで区切って増やせば適用されます。
管理画面にカスタム投稿タイプ毎の記事数を表示
ダッシュボードにいつも表示されている「投稿○件」などの情報がカスタム投稿タイプにはありません。この画面に投稿タイプ毎の記事数を表示するには以下のコードをfunctions.phpへ追加します
add_action( 'dashboard_glance_items', 'add_custom_post_dashboard_widget' );
function add_custom_post_dashboard_widget() {
$args = array(
'public' => true,
'_builtin' => false
);
$output = 'object';
$operator = 'and';
$post_types = get_post_types( $args, $output, $operator );
foreach ( $post_types as $post_type ) {
$num_posts = wp_count_posts( $post_type->name );
$num = number_format_i18n( $num_posts->publish );
$text = _n( $post_type->labels->singular_name, $post_type->labels->name, intval( $num_posts->publish ) );
if ( current_user_can( 'edit_posts' ) ) {
$output = '<a href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a>';
}
echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
}
}
WordPress Popular Postsの設定変更
当サイトではウィジェットとトップページにWordPress Popular Postsのランキングを載せているのですが、ここも設定を変更しないとカスタム投稿タイプの記事は適用されないので修正。
WordPress Popular Postsを使用した人気記事一覧のショートコード
WordPress Popular Postsというプラグインを使って任意の場所へ人気記事の一覧を表示する際、カスタム投稿タイプのコンテンツも含めるには、パラメーターを足す必要があります。
通常のショートコードである[wpp]の中へカスタム投稿タイプの情報も追加して以下のようにします。
[wpp post_type="post,page,カスタム投稿タイプ名1,カスタム投稿タイプ名2"]
上記では、投稿(post)、固定ページ(page)、カスタム投稿タイプ1(投稿タイプのスラグに変える)、カスタム投稿タイプ2(投稿タイプのスラグに変える)としていますが、カスタム投稿タイプの数に応じてカンマで区切って増減させれば大丈夫です。
カスタム投稿タイプ用の記事テンプレートやアーカイブページを作る
通常テーマの動作はカスタム投稿タイプ用のテンプレートが存在しなければ、通常のテンプレートを使うようになっていますので個人的には必要に迫られてからでもいいと思いますが、テーマによっては作らないと動作しないものもあるかもしれません。
参考記事として、「Simplicity2」というテーマでカスタム投稿タイプ用のテンプレートを作ったときの備忘録を紹介しておきます。
【Simplicity2】カスタム投稿タイプ向けの投稿テンプレートを作ってみたときの備忘録
プラグインなどで個別に設定を行うことを忘れずに
使用中のプラグインの設定画面では、カスタム投稿タイプごとに含める/含めないなどの設定が必要な場合があります。「通常の投稿では使えたのにカスタム投稿タイプではだめなの?」と判断しがちですが、一度各プラグインの管理画面を開いて対応できるかを確認しましょう(ひっそり設定項目が追加されていることがほとんどです)。
以上で普通の投稿とほぼ同様に扱うことができるようになります。各項目を設定する毎にちゃんと動作するかを確認しておくようにしましょう。
あとは好みや使っている機能に合わせて調整していけばいいと思いますので、参考記事へのリンクを作っておきます。
WordPressでカスタム投稿タイプを使う上で参考になりそうな追加プラグインいろいろ
すべての投稿タイプ含めたサイトマップを自動作成するプラグイン「WP Sitemap Page」
カスタム投稿タイプの投稿一覧を作るプラグイン「Custom Post Type List Shortcode」
【WordPress】カスタム投稿タイプで書いた投稿の一覧を固定ページなどへ表示するコード
通常の投稿とカスタム投稿タイプの投稿を相互移動できるプラグイン「Post Type Switcher」
通常の投稿とカスタム投稿タイプの投稿を一括相互変換をするプラグイン「Convert Post Types」
【WordPress】カスタム投稿タイプの投稿編集画面にAddquickTagのボタンなどが表示されないときは
【WordPress】便利機能「カスタム投稿タイプ」に投稿を追加しても全くアクセスがないときの確認事項