[wp]指定と除外の複数条件でターム指定してカスタム投稿一覧を出力

めったにないけど、そういうことをする場合もあるねという。

活用シーン

「ターム「〇〇○」が付いていて、ターム「×××」が付いていない記事の一覧」というのを作る場合。

除外を含むのは割と特殊な絞り込みなんで、記事よりは商品一覧とかスタッフ一覧とかで使う場面がある感じですね。

作り方

「カスタム投稿「AAAA」タクソノミー「aaaa」にあるタームスラッグ「〇〇○」が付いていて、タームスラッグ「×××」が付いていない記事の一覧を出力する」をやるとする。

<?php
$myQuery = new WP_Query();
$param = array(
    'posts_per_page' => '-1',
    'post_type' => 'AAAA',
    'tax_query' => array( 
        'relation' => 'OR',
        array(
            'taxonomy' => 'aaaa',
            'field' => 'slug',
            'terms' => array( '○○○','×××' ),
            'operator'=>'AND',
        ),
        array(
            'taxonomy' => 'aaaa',
            'field' => 'slug',
            'terms' => array( '×××' ),
            'operator' => 'NOT IN',
        ),
    ),
);
	$myQuery->query($param);
?>
<?php if($myQuery->have_posts()): ?>
<ul>
<?php while($myQuery->have_posts()) : $myQuery->the_post(); ?>
<li><?php the_title(); ?></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

単純に「○○○○のもの」と「××××を除いたもの」をかけ合わせても動作しない。まず槍玉に上がるやつを並べてから話が始まるようで、「○○○○」と「××××」を指定してから「××××」を除くって感じになりますね。

単純な複数指定だったらあっさり書けるんだけど、除外が混ざるとよくわかんないことになる。国語的な考えで書くと動かない。両条件とも掛かってんのになんで「OR」なんだよって、なかなかめんどくさい。「relation」と「operator」に注意。

ちなみにタームの指定が1つの場合も例の通りにtermsで配列に入れて書かないといけない。tax_query無しのときみたいにtermで書くことはできない。

参考

WordPress カテゴリが複数指定されている場合のカテゴリ除外方法
カテゴリがAとBが設定されている記事で、Aを除外したいけど、Bが設定されている場合は表示したいという…

まとめ的なもの

単純な複数条件ならともかく、指定と除外の組み合わせだとややこしくなる。そんでもってこれ系の記事は件名とかがマニアックだったり言葉足らずで該当のものを探しにくい感じがあるんで、探してる人の助けになればいいなって思う。

コメント

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