BETA

get_postsで特定のカスタムタクソノミーのタームのみに該当する投稿を抽出する

投稿日:2019-05-22
最終更新:2019-05-22

get_postsで投稿を絞り込む際に、カスタムタクソノミーで絞り込みをしたい、という状態に遭遇して調べたのでメモしておきます。

<?php  
$get_posts_args = [  
    'order' => 'ASC',  
    'orderby' => 'ID',  
    'post_type' => 'post',  
    'post_parent' => 0  
];  
$get_posts_args['tax_query'] = [  
    [  
        'taxonomy' => 'TAXONOMY_SLUG',  
        'field'    => 'slug',  
        'terms'    => 'TERM_SLUG'  
    ]  
];  
$posts = get_posts( $get_posts_args );  

書き方としてはこんなイメージ。TAXONOMY_SLUGはタクソノミーのスラッグ(カテゴリーならばcategoryなど、カスタムタクソノミー全体のスラッグ)、TERM_SLUGはカスタムタクソノミーに属すターム(カテゴリーの中の「雑記」や「未分類」のようなもの)のスラッグを記述します。

今回は階層あり(カテゴリーと同じようにチェックボックスで選択するタイプ)のカスタムタクソノミーとしたので、該当タームにチェックが付いていればヒットし、チェックが入ってない投稿はこの条件では抽出されない、という挙動になります。

Codexにはtax_queryの記載がないため戸惑いましたが、可能ということでメモ。

余談

get_postsの段階ではなく、それより後(get_postsでいったん抽出し、その中から再度探す)という場合はhas_termsというテンプレートタグが使えたので併せて記載しておきます。

<?php  
foreach ( $posts as $post ) { //get_postsで抽出した投稿オブジェクトに対してforeach  
    if(has_term( 'TERM_SLUG', 'TAXONOMY_SLUG', $post->ID )) { //投稿オブジェクトが該当タームを持つか判定  
        //タームを持つ投稿の場合の処理  
    }  
}  

参考

get_posts

has_terms

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

アルム=バンドのQrunch

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう