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

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)と、「カスタム投稿タイプ」というカスタム投稿タイプを混合するためのものですが、コード中の「, ‘カスタム投稿タイプ’」の部分を追加すればいくつでも混合させることができます。

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

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


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