調べるとよく出回っている?一覧用のテンプレートで以下の投稿と複数のカスタム投稿タイプを混合させて一覧にするコード。
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)と、「カスタム投稿タイプ」というカスタム投稿タイプを混合するためのものですが、コード中の「, ‘カスタム投稿タイプ’」の部分を追加すればいくつでも混合させることができます。
まあ個人的には、クエリーループブロックでの投稿タイプ選択が単一ではなくマルチセレクトになってれば追加コードも必要ないのに..と思うのですが、ないものはしゃーないので、上記コードを使っています。
困っている誰かの参考になれば...。
本ページで掲載しているコードのヒントになったページ
- pre_get_posts でメインクエリを操作して投稿の表示条件を変更する【WordPress】
- WordPress: Query to show all Custom Post Types and set a Post Type icon for each post instead of Featured Images
コードを使用する前に、ここをクリックして注意事項をご確認ください
本ページで掲載しているコードは、以下に了承した上で使用ください
- コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
- コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
- コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
- コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
- 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
- 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)
特定のクエリーループのみで条件変更したいときは
ここまでは標準の一覧テンプレートでのことを書いてきましたが、ページ内にある特定のクエリーループのみ条件の変更を加えたい場合もあるでしょう。
そんな時は以下のページを参考にしてみてくださいね。
コメントを残す