カスタム投稿タイプをWP_Queryループで抽出条件を複数指定して表示する

カスタム投稿タイプを、カスタムタクソノミー(カテゴリー・タグ)やカスタムフィールドなど、抽出条件を複数指定して、WP_Queryループで表示させる方法を紹介します。
私は習得するのにちょっと時間がかかってしまいましたが…😅、一度覚えてしまうと、トップーページや固定ページ、サイドバーなどにいろいろ使えて、とにかく便利です!

いくつかサンプルを書いておきますので、どなたかのお役に立てればうれしいです。
※カスタムフィールド名に「wpcf-」が付いているのは、「Toolset Types」を利用しているためです。

サンプル

チェックボックスにチェックの入った記事から並べる。ソート順も複数指定

【条件】

  • カスタム投稿「gourmet」の記事
  • カスタムタクソノミー「area_category」の、ターム「tokyo」に属する記事
  • 10件表示
  • カスタムフィールド「wpcf-gensen」のチェックボックスにチェックの入った記事から順に並べる
  • 新しい記事から順に並べる
<?php
  $args = array(
    'post_type' => 'gourmet', /* カスタム投稿名が「gourmet」 */
    'posts_per_page' => 10, /* 表示する数 */
    'tax_query' => array(
      array(
        'taxonomy' => 'area_category', /* カスタムタクソノミー名が「area_category」 */
        'field' => 'slug',
        'terms' => 'tokyo' /* ターム名が「tokyo」 */
      )
    ),
    'meta_query' => array(
      'relation' => 'AND',
      'meta_gensen' => array(
        'key'     => 'wpcf-gensen', /* カスタムフィールド名が「wpcf-gensen」 */
        'value' => array("1", "0"), /* チェックボックスのON・OFF */
        'type' => 'char'
        )
      ),
    'orderby' => array(
      'meta_gensen' => 'desc', /* チェックボックス「wpcf-gensen」にチェックの入ったものから順に */
      'date' => 'desc' /* 新しい記事から順に */
      ),
    );
?>

複数条件指定、カスタムフィールドの数値で並べ替える

【条件】

  • カスタム投稿「takuhai」の記事
  • カスタムタクソノミー「category_company」の、ターム「company_a」に属する記事
  • 全て表示
  • カスタムフィールド「wpcf-family」 の値が「3」の記事
  • カスタムフィールド「wpcf-monthly」の値が「10000より上」の記事
  • カスタムフィールド「wpcf-monthly」の値の少ないものから順に並べる
<?php
  $args = array(
    'post_type' => 'takuhai', /* カスタム投稿名が「takuhai」 */
    'posts_per_page' => -1, /* 全記事表示 */
    'tax_query' => array(
      array(
        'taxonomy' => 'category_company', /* カスタムタクソノミー名が「category_company」 */
        'field' => 'slug',
        'terms' => 'company_a' /* ターム名が「company_a」 */
      )
    ),
    'meta_query' => array(
      'relation' => 'AND',
      'meta_family' => array(
        'key' => 'wpcf-family', /* カスタムフィールド名が「wpcf-family」 */
        'value' => '3', /* カスタムフィールドの値 */
        'type' => 'numeric',
        'compare' => '=' /* 値一致 */
      ),
      'meta_monthly' => array(
        'key' => 'wpcf-monthly', /* 月額利用額・カスタムフィールド名が「wpcf-monthly」 */
        'value' => '10000', /* カスタムフィールドの値 */
        'type' => 'numeric',
        'compare' => '>' /* 値より上 */
      )
    ),
    'orderby' => array(
      'meta_monthly' => 'asc' /* 月額利用額の少ないもの順 */
    )
  );
?>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

keyboard_arrow_upTOP