WordPressでカスタムタクソノミを複数指定しその内容を表示する

Wordpress

WordPress3.0から追加されたカスタム投稿タイプ、カスタムタクソノミ(カスタム分類)も、バージョンが上がるごとに少しづつではありますが使いやすくなってきました。

それでも今回、カスタムタクソノミを複数指定した状態でその内容を表示する記述にかなり悩んだので、メモしておきます。

動作確認環境

  • WordPress3.2.1(古いバージョンだと動作しない可能性があります

説明

ポイントは「tax_query」という項目。WordPress3.1から導入されたものらしいです。
ポストタイプ名、紐付けされたカスタムタクソノミ名を指定した上で、指定したいタクソノミのスラッグを記述すると、記事内容を複数から取得します。

コード

“`<?php
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
$args = array(
‘post_type’ => ‘ポストタイプを記述’,
‘posts_per_page’ => 10, //表示件数
‘paged’ => $paged, //現在何ページ目かを取得
‘tax_query’ => array( //カスタム分類を複数選択
‘relation’ => ‘AND’, //ANDまたはOR
array(
‘taxonomy’ => ‘タクソノミ名を記述’,
‘terms’ => array(‘スラッグ名1′,’スラッグ名2’), //タクソノミのスラッグ名
‘field’ => ‘slug’, //terms で指定したフィールド(term_id(デフォルト),name,slug)
)
)
);
$wp_query = new WP_Query($args);
?>
<?php if($wp_query->have_posts()): ?>
<dl>
<?php while($wp_query->have_posts()) : $wp_query->the_post(); ?>
<dt><?php the_time(‘Y/m/d’); ?></dt>
<dd><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dd>
<?php endwhile; ?>
</dl>
<?php else: ?>
<h2>記事がありませんでした</h2>
<p>申し訳ありません。ご覧のページは存在しないか、URLが変更された可能性があります。</p>
<?php endif; ?>“`

複数タクソノミで絞り込んだ状態でさらにページネーションを行いたい場合は、Yurikoさんの「Yuriko.Net » WP-PageNavi を使わずにナビゲーション表示」のコードを

“`<?php include(TEMPLATEPATH.’/temp_pagenavi.php’); ?>“`

みたいな感じで読み込んでください。

最後に

今回はこの程度の記述で済みましたが、いろいろな機能が追加されればそれだけ絞り込みが大変になってきます。複雑になりそうであれば、直接SQLでデータを取得する方が逆にシンプルなのかもしれませんね。

参考

タイトルとURLをコピーしました