2017年以前の旧ブログ
BLOG2017
前回のタクソノミー別、カスタム投稿呼び出しに追加でタクソノミーが複数だった場合のやり方をメモ。
タクソノミーが複数の時
カスタム投稿タイプ: cpt_type
タクソノミー1:tax1
タクソノミー2:tax2
カスタム投稿複数ターム毎一覧出力
該当するタームの記事を一覧で出力します。
$paged = get_query_var('paged');
$arg = array (
'post_type' => 'cpt_type',
'paged' => $paged,
'posts_per_page' => '10',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'tax1',
'field' => 'slug',
'terms' => array($cg1),
'operator' => 'IN'
),
array(
'taxonomy' => 'tax2',
'field' => 'slug',
'terms' => array($cg2),
'operator' => 'IN'
)));
if (count($myposts) > 0) {
if(have_posts()):
while(have_posts()):
the_post();
?>
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
<?php } wp_reset_query(); ?>
上記でタクソノミー1のcg1、タクソノミー2のcg2、両方に該当する記事を出力します。
relationは検索条件の結合方法ですが、ANDとORが設定できます。
cg1、cg2はただの変数ですので好きに値を代入して利用してください。
複数タクソノミーでそれぞれ違う使い方
先ほどの複数タクソノミーの設定を利用して、タクソノミー1の1タームに属するタクソノミー2をターム毎に一覧で出力する方法を考えてみます。
タクソノミー1
> ターム1-1
> ターム1-2
タクソノミー2
> ターム2-1
> ターム2-2
とある場合、一覧ページにターム1-1に該当する記事を
ターム2-1
・投稿記事
・投稿記事
・投稿記事
ターム2-2
・投稿記事
・投稿記事
のように出力する。
まずはタクソノミー2に該当する記事をターム毎に一覧整列させます。
$categoryList = get_terms('tax2',array(
'taxonomy' => 'tax2',
'orderby' => 'order',
'order' => 'ASC',
));
foreach($categoryList as $news_term_item) {
$my_slug[] = $news_term_item->slug;
$my_name[] = $news_term_item->name;
}
$num = count($my_slug); for($a = 0; $a < $num; $a++) {
$cg2 = $my_slug[$a] //term slug
?>
<!--タクソノミー毎記事一覧呼び出し-->
<?php }; ?>
タクソノミー2のターム一覧表示を利用して、記事の一覧を表示します。
さらにタクソノミー1のいずれかのタームがスラッグで選択されると想定して
if(isset($_GET['cg'])) {
$cg1 = $_GET['cg'];
}
$categoryList = get_terms('tax2',array(
'taxonomy' => 'tax2',
'orderby' => 'order',
'order' => 'ASC',
));
foreach($categoryList as $news_term_item) {
$my_slug[] = $news_term_item->slug;
$my_name[] = $news_term_item->name;
}
$num = count($my_slug); for($a = 0; $a < $num; $a++) {
$cg2 = $my_slug[$a] //term slug
?>
$paged = get_query_var('paged');
$arg = array (
'post_type' => 'cpt_type',
'paged' => $paged,
'posts_per_page' => '10',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'tax1',
'field' => 'slug',
'terms' => array($cg1),
'operator' => 'IN'
),
array(
'taxonomy' => 'tax2',
'field' => 'slug',
'terms' => array($cg2),
'operator' => 'IN'
)));
if (count($myposts) > 0) {
if(have_posts()):
while(have_posts()):
the_post();
?>
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
<?php } wp_reset_query(); ?>
<?php }; ?>
以上でタクソノミー1のターム1-1に該当するタクソノミー2をターム毎で記事を一覧表示できました。
内容がピンポイントすぎますが、何かしら応用できたらいいなーと思ってます。