WordPressのカスタマイズ方法やプラグインレビューを中心に、パソコン/動物/植物のことなどを紹介するホームページです

【WordPress】カスタム投稿タイプと通常の投稿を混合して使うためのコード3つ

公開日:2016(平成28)年1月10日/最終更新日:

パソコン



【景品表示法に基づく表記】ページ内のコンテンツには、商品プロモーションが含まれています

それぞれ独立した「投稿の集まり」が作れるカスタム投稿タイプですが、テンプレートだけ切り分けて使ったり、通常の記事にある「カテゴリー」の代わりにカスタム投稿タイプを作ったりする機会もあると思います。

切り分けはしているけど記事の一覧やカテゴリー・タグの一覧を表示した際には訪問者に対してすべて混ぜた上で表示させたいということがあるのではないでしょうか?これを解消するためのコードを紹介します。

すべてfunctions.phpにコードを追加するだけです。

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

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

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

クエリーループブロックではこちらのコードを使う

Twenty Twenty-Oneテーマのようなブロックテーマでは、一覧の表示にクエリーループブロックを使用します。

クエリーループブロックでは、上記のコードを使うとエラーが起きる(複数の投稿タイプが含まれるが、表示が崩れる)ので、以下のコードを使用するようにしましょう。

/* 新着記事一覧へ追加 */
function sample_pre_get_posts( $query ) {
	if ( is_admin() || ! $query->is_main_query() ) {
		return;
	} elseif ( $query->is_home() ) {
		$query->set( 'post_type', [ 'post', 'カスタム投稿タイプ名1', 'カスタム投稿タイプ名2' ] );
		return;
	}
}
add_action( 'pre_get_posts', 'sample_pre_get_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);

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

QA AnalyticsQA Analytics

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

カスタム投稿タイプを追加した際に今まで使っていたタグと共有する設定をした場合、タグ一覧ページが表示されたときには投稿もカスタム投稿タイプも混ぜて表示をしたいというときのカスタマイズです。これを行うには以下のコードを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へコードを追加するには

直接テーマ編集から追加してもいいのですが、WordPressを動作させる上で重要なファイルでもありますので直接編集するのはちょっとリスクがあります。functions.phpに不具合が起こると画面が真っ白になって管理画面、表示画面共アクセス不能となることもあります。そうならないためにも直接編集する場合には正常に機能している状態のファイルを必ずバックアップするようにしてください。

不具合の防止やfunctions.phpへのコード追加をより安全に行えるプラグインもありますので頻繁に変更したりテストしたりする機会のある方や、直接ファイルを変更するのに躊躇する方はこちらを使った方がいいと思います。

テーマのfunctions.phpへ挿入するコードを管理するプラグイン「Code Snippets」

著:清水 由規, 著:清水 久美子, 著:鈴木 力哉, 著:西岡 由美, 読み手:星野 邦敏, 読み手:吉田 裕介
¥2,889 (2024/02/08 17:07時点 | Amazon調べ)