[WordPress] カスタムフィールドの値で条件を絞り込み、ループで記事一覧を表示する

2017.08.10

カスタムフィールドの値で条件を絞り込み、該当記事を表示させる方法です。

例えば、
「news」というカテゴリーの、カスタムフィールドのチェックボックスにチェックを入れた記事だけ、TOPページに最新記事のタイトルを5件表示したい
という場合のコードを考えてみます。

「show_index」というチェックボックスのカスタムフィールドを作成し、 選択肢は「show : TOPページにこの記事を表示する」とします。「show」が値で「TOPページにこの記事を表示する」がラベルになります。以下の画像はプラグイン「Advanced custom fields」を使っています。

カスタムフィールドの値で条件を絞り込み

Advanced custom fieldsで上記のようにカスタムフィールドを作成すると、投稿画面に「TOPページにこの記事を表示する」というチェックボックスが出現するので、TOPページに表示させたい記事にはチェックボックスにチェックを入れます。

カスタムフィールドの値で条件を絞り込み

サンプルコード

<ul>
<?php $args = array(
        'posts_per_page'   => 5, //5件表示する
        'category_name'    => 'news',  //カテゴリー「news」
        'orderby'          => 'date',  //日付順
        'order'            => 'DESC', //降順
        'meta_key' => 'show_index', //カスタムフィールドのキー
        'meta_value' => 'show', //カスタムフィールドの値
        'meta_compare' => 'LIKE' //'meta_value'のテスト演算子
          );
$my_query = new WP_Query($args);
if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post();
?>

<li><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>

<?php endwhile; endif; wp_reset_postdata(); ?>
</ul>

カスタムフィールドのパラメーター

meta_key
カスタムフィールドのキー
meta_value
カスタムフィールドの値(文字列として比較)
meta_compare
‘meta_value’のテスト演算子。使える値は ‘!=’, ‘>’, ‘>=’, ‘<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' および 'RLIKE' で、デフォルトは '=' 。

サンプルコードでは、meta_keyが「show_index」、meta_valueが「show」、meta_compareが「LIKE」となっています。
チェックボックスにチェックを入れると、カスタムフィールドの値が「show」になるので、「show_index」と「show」が一致した記事が出力されます。

meta_query」を使うと、配列をひとつまたは複数入れることができるので、複数のカスタムフィールドを組み合わせて検索することも可能です。 配列の「relation」パラメータで、複数のカスタムフィールドの関係を指定します。使える値は ‘AND’と’OR’です。デフォルト’AND’です。

//単一のカスタムフィールドの場合

<?php $args = array(
        'meta_query' => array(
        array('key'=>'show_index', 'value'=>'show', 'compare'=>'LIKE')
         )        
  );
?>

//複数のカスタムフィールドの場合
//例:色が赤以外で、値段が500と2000の間にあるものを表示する

$args = array(
     'meta_query' => array(
          'relation' => 'OR',
          array(
               'key'     => 'color',
               'value'   => 'red',
               'compare' => 'NOT LIKE',
          ),
          array(
               'key'     => 'price',
               'value'   => array( 500, 2000 ),
               'type'    => 'numeric',
               'compare' => 'BETWEEN',
          ),
     ),
);

meta_queryのパラメーター

meta_query
(配列)カスタムフィールドの複雑なパラメータ
relation
(文字列)meta_query の中に2つ以上の配列を入れたときの関係を指定します。使える値は’AND’と’OR’です(デフォルト:’AND’)。ひとつだけ配列を入れるときは使用不可。
key
(文字列)カスタムフィールドのキー
value
(文字列|配列)カスタムフィールドの値
compare
(文字列)テスト演算子。使える値は ‘=’, ‘!=’, ‘>’, ‘>=’, ‘<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS'および'NOT EXISTS'で、デフォルトは'='。
type
(文字列)カスタムフィールドの値のタイプ。使える値は’NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘SIGNED’, ‘TIME’, ‘UNSIGNED’で、デフォルトは’CHAR’。

カスタムフィールドのパラメーターは以下のリンク先に詳しく書かれています。