2019年12月04日

WordPress カスタムフィールドの値でコンテンツを出し分ける方法|使用率が多いパターン3選

WordPress カスタムフィールドのチェックボックスでコンテンツを出し分ける方法

お世話になっております。佐藤です。今回は最近のWordPress案件にてカスタムフィールドでチェックボックス(フラグ)を導入し、チェックの有無によって項目を出し分けるという仕様に関して解説していこうと思います。

カスタムフィールドのチェックボックスでコンテンツを出し分ける方法

<ul>
  <?php
    $args = array(
      'post_type' => 'post',
      'post_status' => 'publish',
      'posts_per_page' => 10,
      'meta_key' => 'attention',
    );
    $query = new WP_Query($args);
    if ( $query->have_posts() ) :
      while ( $query->have_posts() ) : $query->the_post();
  ?>
  <li>コンテンツ</li>
  <?php endwhile; endif; wp_reset_postdata(); ?>
</ul>

上記のコードで言えば、投稿タイプ「post」・カスタムフィールドのフィールド名「attention」を絞り込んで$queryに代入しています。チェックボックスのチェック有無の場合はこのパターンで実装できます。

カスタムフィールドの特定の値を指定して絞りこむ方法

 <?php
    $args = array(
      'post_type' => 'post',
      'post_status' => 'publish',
      'posts_per_page' => 10,
      'meta_key' => 'attention',
      // meta_valueに絞り込みたい値を指定
      'meta_value' => 'テスト'
    );
    $query = new WP_Query($args);
    if ( $query->have_posts() ) :
      while ( $query->have_posts() ) : $query->the_post();
  ?>
  <li>コンテンツ</li>
  <?php endwhile; endif; wp_reset_postdata(); ?>
</ul>

上記のパターンでは「meta_value」に絞り込みたい値を指定することによってそれの値によって絞り込むことが可能となります。

カスタムフィールドの値で並び替える方法

 <?php
    $args = array(
      'post_type' => 'post',
      'post_status' => 'publish',
      'posts_per_page' => 10,
      'meta_key' => 'attention',
      // 並び順を指定することができる
      'order' => 'DESC'
    );
    $query = new WP_Query($args);
    if ( $query->have_posts() ) :
      while ( $query->have_posts() ) : $query->the_post();
  ?>
  <li>コンテンツ</li>
  <?php endwhile; endif; wp_reset_postdata(); ?>
</ul>

「order」を指定することで$queryに代入する前に並び替えしておくことが可能です。指定できる値には「ASC」と「DESC」があります。

  • 「ASC」 – 最低から最高へ昇順 (1, 2, 3; a, b, c)
  • 「DESC」 – 最高から最低へ降順 (3, 2, 1; c, b, a)

その他の複雑な絞り込みパターンについてはまた記事を分けて書いていこうと思いますが、私が経験した案件では以上のパターンでほとんどは事足りました。複雑な検索の実装や絞り込みパターンを実装する機会もありましたがとりあえず以上の3つのパターンを把握しておけばある程度対応できると思います。

是非、カスタムフィールドのパターンを実装してみて下さい。