こんにちは、Ryohei(@ityryohei)です!

WP_Queryを使用して、絞り込みとソート用のカスタムフィールドに別のものを指定して取得する方法のご紹介です。

WP_Queryでカスタムフィールドで絞り込み、別のカスタムフィールドでソートをする方法になります。複数のカスタムフィールドを指定して複雑な投稿の取得が可能となります。

本記事の内容

  • WP_Queryとは
  • カスタムフィールドで絞り込む
  • カスタムフィールドでソートする
  • カスタムフィールドの値で絞り込み、ソートする

では、解説していきます。

WP_Queryとは

WP_Queryは投稿を取得する際に使用するWordpressのクラスになります。もう少し詳しくお話すると、Wordpressの投稿データはDBに保存されていますが、WP_Queryを使用することで、様々な条件を指定して投稿データを取得することが可能となります。

さらに詳しい内容につきましては、下記のリンクをご参照ください。

WP_Query

カスタムフィールドで絞り込む

スタンダードな方法になります。

WP_Queryでカスタムフィールドを使って取得する投稿を絞り込みます。

<?php

  $args = array(
    'post_type' => array('post_type'), //投稿タイプを指定
    'posts_per_page' => '-1', //取得する投稿件数を指定
    'meta_key' => 'key', //カスタムフィールドのキーを指定
    'meta_value' => 'value' //カスタムフィールドの値を指定
  );
  $the_query = new WP_Query($args);

  if($the_query->have_posts()){
    while($the_query->have_posts()){
      $the_query->the_post();

      //ここにループ内の処理

    }
  }
  wp_reset_postdata();

?>

カスタムフィールドでソートする

WP_Queryでソートする方法を指定します。

下記の例は、「key」というカスタムフィールドの値で取得する投稿を絞り込み、カスタムフィールドの値の昇順でソートしています。

<?php

  $args = array(
    'post_type' => array('post_type'), //投稿タイプを指定
    'posts_per_page' => '-1', //取得する投稿件数を指定
    'meta_key' => 'key', //カスタムフィールドのキーを指定
    'meta_value' => 'value' //カスタムフィールドの値を指定
    'orderby' => 'meta_value', //ソートの基準を指定
    'order' => 'asc' //ソート方法を指定(昇順:asc, 降順:desc)
  );
  $the_query = new WP_Query($args);

  if($the_query->have_posts()){
    while($the_query->have_posts()){
      $the_query->the_post();

      //ここにループ内の処理

    }
  }
  wp_reset_postdata();

?>

カスタムフィールドの値で絞り込み、ソートする

最後に本記事でやりたかった内容となります。

結果としては、meta_queryで絞り込むカスタムフィールドを指定して、上記でご紹介した方法でソートを指定します。

<?php

  $args = array(
    'post_type' => array('post_type'), //投稿タイプを指定
    'posts_per_page' => '-1', //取得する投稿件数を指定
    'meta_query' => array(
      'key' => 'key', //絞り込みするカスタムフィールドのキーを指定
      'value' => 'value', //絞り込みするカスタムフィールドの値を指定
      'compare' => '=' //絞り込み条件を指定(=は一致)
    ),
    'meta_key' => 'key', //ソートするカスタムフィールドのキーを指定
    'orderby' => 'meta_value', //ソートの基準を指定
    'order' => 'asc' //ソート方法を指定(昇順:asc, 降順:desc)
  );
  $the_query = new WP_Query($args);

  if($the_query->have_posts()){
    while($the_query->have_posts()){
      $the_query->the_post();

      //ここにループ内の処理

    }
  }
  wp_reset_postdata();

?>

meta_queryは下記のページで詳しく解説されていますので、より複雑な絞り込みをする際にご参考にしていただければと思います。

WP_Query

最後に

WP_Queryは様々な条件を指定して投稿を取得することができるクラスです。Wordpressを扱う上で必須の知識となりますので、Codexを見ながら様々な方法で投稿やページを取得してみてください。

以上、WordpressのWP_Queryで絞り込みとソートのカスタムフィールドを指定する方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。