実装者向けの記事です。
WordPressで投稿一覧を出力する時に、カスタムフィールドの値で条件づけしたい時があります。その方法を解説します。
WordPressのループ、おさらい
WordPressの「ループ」とは、データベースに入っているデータを引っ張り出して出力する機能のことです。
投稿記事一覧、ブログ記事一覧なんかが、最もわかりやすい例でしょう。
WordPressループのコード(サブループ)
WordPressループのコードはいくつか書き方がありますが、よく使われる例としてこんなのがあります。
<?php
$args = array(
'posts_per_page' => 15,
'orderby' => 'post_date',
'order' => 'DESC',
'post_type' => 'post',
);
$the_query = new WP_Query( $args );
if( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) :
$the_query->the_post();
?>
-- 繰り返すHTML --
<?php endwhile;?>
<?php else: ?>
-- 記事がないときのHTML --
<?php endif; ?>
上記は厳密には「サブループ」と呼ばれます。
WordPressではURLに基づいてデフォルトでの出力条件があって、これを素直に使うのが「メインループ」。
それに対して「サブループ」とは、特定の条件づけに基づいて自在にデータを出力する方法です。
・
上のコードの、アンダーライン部分が、「特定の条件づけ」にあたります。
ピンクのアンダーラインでは、「$args」という変数に、いろんな条件(パラメータ)を入れています。
そしてオレンジのアンダーライン箇所で、WP_Queryオブジェクトを作り、その引数に各種パラメータを持たせることで、出力条件を制御しているわけです。
meta_query
ここからが本題。
サブループでの条件づけの際に、カスタムフィールドの値を使う方法です。
パラメータのところに、「meta_query」を使います。
例えば。
$args = array(
'posts_per_page' => 15,
'orderby' => 'post_date',
'order' => 'DESC',
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'key_check',
'value' => true,
'compare' => '='
)
)
);
上のコードのオレンジ箇所の意味は、
「key_check」というカスタムフィールド(スラッグ)の値が「true」のものを出力せよ。
です。
カスタムフィールドの値が「true」というケースは、例えばチェックボックスがチェックされているときなどですね。
‘compare’というのは、’key’と’value’の比べ方を表します。
‘=’ は「等しい」、’!=’ だと等しくないです。その他、’>=’ などの演算子も使えます。
また、’LIKE’ や ‘IN’、’NOT LIKE’、’NOT EXIST’などで「含む」とか「含まない」「存在しない」などの条件づけも可能です。
カスタムフィールドの条件づけを複数組み合わせる
条件づけを複数組み合わせることも可能です。
例えば。
$args = array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'key_check',
'value' => true,
'compare' => '='
),
array(
'key' => 'first_name',
'value' => 'TOM',
'compare' => 'LIKE'
)
)
);
meta_queryの中で複数条件を組み合わせて条件づけするサンプルです。
お察しの通り、オレンジ色の ‘relation’ は、条件同士の関係性を表します。’AND’ の他に、’OR’が指定できます。
上のコードの意味は、
カスタムフィールド’key_check’ の値がtrue で、かつ(AND)、カスタムフィールド’first_name’ の値に’TOM’ が含まれているものを出力せよ! ということですね。
meta_query を使えば、カスタムフィールドで条件を絞り込んで、かなり自由自在にデータを出力できるようになります。
compareで、’NOT LIKE’ とか ‘NOT EXIST’ と使って除外条件を設定するシチュエーションも多いです。
よろしければどうかご感想を!
※コメントは、サイト管理者による承認後、ページに表示されます。
私もWeb制作をしています。
こちらの方法で実装したことなかったので、大変勉強になります。
WordPressからしばらく離れていましたが、他の記事も参考に勉強させていただきます!!
さかじさん
コメントありがとうございます!
Webの実装、たのしいですよね
参考にしていただけてよかったです
今後ともよろしくお願いいたします