カスタム投稿タイプを100%使いきるための設定マニュアル(備忘録)

公開日:2016年1月7日 使い方など
Knowledge Base パソコン

ワードプレスで通常の投稿とは別に「投稿の集まり」を作れる機能であるカスタム投稿タイプ。カスタム投稿タイプ用にテンプレートを作ってカスタムフィールドの入力のみで記事を作成できたり、カスタムタクソノミーといってカスタム投稿タイプごとに独自のタグやカテゴリーを設けられたりと、Wordpressでこれを覚えたらやりたい放題になる機能ですが、そもそも機能を使うのにもちょっと知識が必要だし、カスタム投稿タイプは導入しただけでは通常の記事のように動作しないし、いろいろと設定をしないと検索エンジンクローラーが来てくれない(インデックスされない)など忘れてはいけない設定がたくさんあるので、忘れないように手順を書いておこうと思います。これだけやればカスタム投稿タイプを100%活用できる手順です。

カスタム投稿タイプを作る

これは、コードを自分で書くよりもプラグインに委ねた方がいい。一番有名な「Custom Post Type Ui」を使用すれば簡単にカスタム投稿タイプがいくらでも作れます。

ちなみにですが、「Custom Post Type UI」でカスタム投稿タイプを作成するとき右側のオプションにある「リライト」という項目を「する」に設定すると、今までの記事をカスタム投稿タイプで作ったタイプへ変更してもきちんとリダイレクトしてくれます。分かりやすく言うと、元の記事アドレスにアクセスしてもきちんと新しいアドレスに変換して表示してくれるということですね。
ソースでは下のコード部分になります
“rewrite” => array( “slug” => “wpupdate”, “with_front” => true ),
 ただこの処理には限界があって、サイトへのリンク(内部・外部とも)を通常のaタグを使う

<a href=""></a>
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. 上のようなことがないのに更新できない
  6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

コードを転載する場合には

ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

とブログカードでのリンクはできないものの、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 );
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. 上のようなことがないのに更新できない
  6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

コードを転載する場合には

ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

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');
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. 上のようなことがないのに更新できない
  6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

コードを転載する場合には

ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

「カスタム投稿タイプ名」のところにカスタム投稿タイプのスラグを入れて完了、たくさんある場合はカンマで区切って増やせばいい。

新着記事にカスタム投稿タイプの記事を含める

通常の記事とは別にカスタム投稿タイプ毎の記事一覧を表示してもいいとは思うのですが、どうせなら通常の記事一覧とカスタム投稿タイプの記事を混ぜて表示した方がサイトの新鮮さが伝わるというもの。これを行うには以下のコードを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' );
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. 上のようなことがないのに更新できない
  6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

コードを転載する場合には

ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

「カスタム投稿タイプ名」のところにカスタム投稿タイプのスラグを入れて完了、たくさんある場合はカンマで区切って増やせばいい。

カテゴリーアーカイブにカスタム投稿タイプの記事を含める

カスタム投稿タイプを追加した際に今まで使っていたカテゴリーと共有する設定をした場合、カテゴリー一覧ページが表示されたときには投稿もカスタム投稿タイプも混ぜて表示をしたいというときのカスタマイズです。これを行うには以下のコードを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);
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. 上のようなことがないのに更新できない
  6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

コードを転載する場合には

ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

「カスタム投稿タイプ名」のところにカスタム投稿タイプのスラグを入れて完了、たくさんある場合はカンマで区切って増やせばいい。

タグアーカイブにカスタム投稿タイプの記事を含める

カスタム投稿タイプを追加した際に今まで使っていたタグと共有する設定をした場合、タグ一覧ページが表示されたときには投稿もカスタム投稿タイプも混ぜて表示をしたいというときのカスタマイズです。これを行うには以下のコードを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);
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. 上のようなことがないのに更新できない
  6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

コードを転載する場合には

ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

「カスタム投稿タイプ名」のところにカスタム投稿タイプのスラグを入れて完了、たくさんある場合はカンマで区切って増やせばいい。

管理画面にカスタム投稿タイプ毎の記事数を表示

ダッシュボードにいつも表示されている「投稿○件」などの情報がカスタム投稿タイプにはありません。この画面に投稿タイプ毎の記事数を表示するには以下のコードを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 . '&nbsp;' . $text . '</a>';
		}
		echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
	}
}
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. 上のようなことがないのに更新できない
  6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

コードを転載する場合には

ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

WordPress Popular Postsの設定変更

 当サイトではウィジェットとトップページにWordpress Popular Postsのランキングを載せているのですが、ここも設定を変更しないとカスタム投稿タイプの記事は適用されないので修正。

トップページのショートコード

トップページへはショートコードで一覧表示していますが、ここにパラメーターを足す必要があります。
通常は、[wpp]と記述すればひとまずデフォルトの状態での人気記事表示がされますが、ここへカスタム投稿タイプの情報も追加します。追加するのは

post_type="post,page,カスタム投稿タイプ名1,カスタム投稿タイプ名2"
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. 上のようなことがないのに更新できない
  6. 特に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。

コードを転載する場合には

ご自身のサイトで当ページのコードを転載される場合には必ず当ページへのリンクを入れていただきますようお願いいたします

という内容です。たくさんある場合はカンマで区切って増やせばいいです。

サイドバーウィジェットの設定

使用しているSimplicityというテーマではWordpress Popular Postsと連携して人気記事を作成できるようになっているのですが、この機能の中でのカスタマイズはできなさそうなので、通常のWordpress Popular Postsウィジェットを使い、ウィジェットの設定の中にある「Post type(s):」という項目にカンマ区切りでカスタム投稿タイプ名を追加していけば完了です。

カスタム投稿タイプ用の記事テンプレートやアーカイブページを作る

通常テーマの動作はカスタム投稿タイプ用のテンプレートが存在しなければ、通常のテンプレートを使うようになっていますので個人的には必要に迫られてからでもいいと思いますが、テーマによっては作らないと動作しないものもあるかもしれません。
ちなみに、simplicityでカスタム投稿タイプ用のテンプレートを作るための備忘録です

プラグインなどで個別に設定を行う

今私が使用しているプラグインでは
「Add Quick Tag」
「Google Sitemap Generator」
「Wp To Twitter」
「Advanced Custom Fields」
あたりで各プラグイン設定画面で項目が追加されているので環境に合わせて調整する必要があります。「通常の投稿では使えたのに・・・」と何時間も調べる前にプラグインを使って追加した機能であればまずは関連するプラグインの設定を確認してみてください


以上で普通の投稿とほぼ同様に扱うことができるようになります。各項目を設定する毎にちゃんと動作するかを確認しておくようにしましょう。

あとは好みや使っている機能に合わせて調整していけばいいと思いますので、参考記事へのリンクを作っておきます。

【スポンサーリンク】


記事の拡散にご協力をお願いします

閲覧いただきありがとうございました。役に立つ情報でしたら是非SNSでシェアをお願いします

関連情報