[WordPress]taxonomy.phpで現在のカスタムタクソノミーを取得しカスタムフィールドの値で条件分岐させる
Publided2014.02.05
普通はtaxonomy.phpにwhile (have_posts()) : the_post();
の基本のループを書いておけば自動で該当カスタム分類(タクソノミー)を取得してくれますが、ちょっとした特殊な事情で普通のループが使えない時のお話です。
※「カスタム分類(タクソノミー)」だといちいち長いので以下を省略して「タクソノミー」と記述します。
実案件がたまたまタクソノミー使ってやるものだったので変に複雑になっちゃいましたが、普通のpostsだったらこんな苦労はしませんね…。カスタムなんちゃら系は思ってもみないような罠が多いので毎度苦戦します。
やりたいこと
- タクソノミーの記事一覧ページ(taxonomy.php)を作る
- カスタムフィールドのラジオボタンでON・OFF機能を作り、ONを選択した記事のみを表示させたい
- タクソノミーは数種類あるが仕様はどれも一緒のため、出力はtaxnomy.phpひとつだけにしたい(hoge-taxnomy.phpのように複数作らない)
- エントリー数が多くページナビゲーションを使うため、ページナビゲーションを正常に動かしたい
カスタムフィールドの出し分け部分が無ければ通常のループで構いませんが、今回はこのカスタムフィールドの値を使ってタクソノミー一覧を表示させたいので一捻りする必要があります。
WordPressは記事を非公開にできるし上記の例のようなわざわざ出し分けの条件分岐なんてしないと思うのですが(しかもタクソノミーで…)、タクソノミーの一覧ページをカスタムフィールドの値で振り分ける一例として残しておきます。
ちなみに、カスタムフィールドでラジオボタンを扱う方法については別途詳細記事を書きましたので、興味がある方はそちらも併せてご覧ください。
実装
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$taxonomy_name = get_query_var('taxonomy');
$tax_posts = get_posts(array('post_type' => get_post_type(), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
$term_var = get_query_var( 'term' );
$myQuery = new WP_Query();
$param = array(
'paged' => $paged,
'posts_per_page' => '表示件数',
'post_type' => 'カスタム投稿タイプ名',
'taxonomy' => $taxonomy_name,
'term' => $term_var,
'meta_query' => array(
array(
'key' => 'カスタムフィールドの名称',
'value' => 'ON'
)
)
);
$myQuery->query($param);
?>
<?php if($myQuery->have_posts()): while($myQuery->have_posts()) : $myQuery->the_post(); ?>
ループ内記述
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>
ポイントは、
- クエリからタクソノミーを取得する
- 該当タクソノミーのページのタームを取得する
- カスタムフィールドの値判定をループ外で行う
こんなところだと思います。get_query_var
が大活躍です。
タクソノミーごとにデザインが違えばタクソノミーごとにtaxonomy.phpを複数作ってタクソノミー名を与えてあげればいいだけなのですが、今回はタクソノミー全部が同じデザインだったため、コードをtaxonomy.phpひとつに纏めたくてこんな方法にしました。ちょっとループのコードが長いですが管理する際に便利です。
また、今回は一例でカスタムフィールドの値で条件分岐させていますが、通常のループが使えない際の現在のページのタクソノミーを取得する参考にもなるかなと思います。
※必要なパラメータがありましたら$param
内に入れて適宜変更してください。
- 参考サイトSpecial Thanks!
- 【WordPress】カスタム投稿タイプの1ページに表示する件数を指定する(ページングもする) – BEMO コードを参考にさせて頂きました
- カスタム投稿タイプとカスタム分類の取得や条件判別 – 我流天性 がらくた屋
- query_posts(WP_Queryクラス)で’tax_query’を使いこなす – WordPress私的マニュアル
- query_posts(WP_Queryクラス)でカスタムフィールドを使う – WordPress私的マニュアル
- @jim0912様いつもありがとうございます