Personal WP Customization Notes (PWCN)

WordPressで実際に行ったカスタマイズの記録、発生した問題への対処時のメモ、ブロックテーマのカスタマイズなど

一覧用テンプレート内のクエリーループブロックで複数の投稿タイプを含めて表示させるようにする方法

調べるとよく出回っている?一覧用のテンプレートで以下の投稿と複数のカスタム投稿タイプを混合させて一覧にするコード。

function chample_latest_posts( $wp_query ) {
if ( is_home() && ! isset( $wp_query->query_vars['suppress_filters'] ) ) {
        $wp_query->query_vars['post_type'] = array('post','追加する投稿タイプ');
    }
}
add_action( 'parse_query', 'chample_latest_posts' );

どこが発祥かも分からない位コピーされたコードが各所で紹介されていて、クラシックテーマ(ブロックテーマではないテーマ)で使っているうちは何の問題もありませんでした。

でも、これをTwenty Twenty-Twoのようなブロックテーマで、クエリーループブロックを使って表示させると、クエリー自体は効く(混合して抽出される)ものの、表示が崩れてしまったのです。

これには何か原因があるのだとは思うのですが、いかんせん私の能力では不明..ということで、いろいろ調べて動作するコードができましたので紹介しておきます。

有効化しているテーマのfunctions.phpで以下を追加し、混合させる投稿タイプを追加していくだけです。

前述した通り、TT2テーマでは表示が崩れるので、冒頭のコードではなく以下のコードを使ってください

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

上記コードは、投稿(post)と、「カスタム投稿タイプ」というカスタム投稿タイプを混合するためのものですが、コード中の「, ‘カスタム投稿タイプ’」の部分を追加すればいくつでも混合させることができます。

まあ個人的には、クエリーループブロックでの投稿タイプ選択が単一ではなくマルチセレクトになってれば追加コードも必要ないのに..と思うのですが、ないものはしゃーないので、上記コードを使っています。

困っている誰かの参考になれば...。


本ページで掲載しているコードのヒントになったページ

特定のクエリーループのみで条件変更したいときは

ここまでは標準の一覧テンプレートでのことを書いてきましたが、ページ内にある特定のクエリーループのみ条件の変更を加えたい場合もあるでしょう。

そんな時は以下のページを参考にしてみてくださいね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

※リンクやURLの挿入されているコメントは無視します

WordPressサイトのカスタマイズ方法、機能追加を行うプログラム例など
CSSをHTMLソースに直接出力する、wp_add_inline_style()の使い方