タクソノミーページで、あるタクソノミーを全ページに表示する
2014-04-20
簡潔なタイトルが難しい・・・
例えば、
カスタム分類名「area」、ラベル「エリア」を作り、「全国」「関東」「関西」で記事管理しているとします。
「全国」に分類された記事は、「関東」のアーカイブページでも「関西」のアーカイブでも、表示したい!
てな時の話です。
ちょうど「pre_get_post」のおさらいをしていたので、ちょうどよい題材でした。
functions.phpに、
add_action( 'pre_get_posts', 'set_baseTaxonomy' ); function set_baseTaxonomy( $query ) { $arg = array( 'taxonomy' => 'area', 'field' => 'slug', 'terms' => 'zenkoku', 'operator' => 'IN' ); if ( !is_admin() && $query->is_main_query() ) { if ($query->is_archive) { $query->set('tax_query', array( 'relation' => 'OR', $arg) ); } } }
と書くと、どのページでも「全国」の分類記事が表示されるようになります。
‘taxonomy’ => ‘area’, や terms’ => ‘zenkoku’, は柔軟に変更ください。
また、’relation’ => ‘OR’, を’relation’ => ‘IN’, にすると、
『全国」かつ「関東」、のように2つに分類されている記事だけ抽出します。
便利な「pre_get_posts」
いろいろなサイトで「pre_get_posts」の説明をしてくれています。
「pre_get_posts」のいいところは、テンプレート前に処理をするので、無駄なくユーザーまでデータが進む点ですね。
テンプレートで、query_post などで処理をすると、
ユーザーURL叩く→WPがURLを解析する→それに合わせてDBから出す→テンプレート見る→query_postに絞り込み処理書いてる→またDB見に行く→テンプレートのwhileなど回す→ユーザー見る
のような流れになるようですが、「pre_get_posts」ですと、
ユーザーURL叩く→WPがURLを解析する→「pre_get_posts」のフィルタ見る→それに合わせてDBから出す→テンプレート見る→テンプレートのwhileなど回す→ユーザー見る
のように
query_postに絞り込み処理書いてる→またDB見に行く→
の処理が不要になるので、実によろしいようです。
どうしてもテンプレート内でしかできない処理もあるでしょうから、そのあたりはうまく使い分けることが肝要でしょう。
またいろいろ便利な処理を書いていきたいと思います。