キタックCGソリューションセンター

自分で触りたいWeb担のためのTips集

【WordPress】カスタムフィールドの値でループ条件を絞り込む(meta_query)

2022年12月06日(火)

PV 113

実装者向けの記事です。

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’ と使って除外条件を設定するシチュエーションも多いです。

WordPressの実装に関する他の記事

Share プリーズ
書き手は私

よろしければどうかご感想を!

※コメントは、サイト管理者による承認後、ページに表示されます。

  1. さかじ より:

    私もWeb制作をしています。
    こちらの方法で実装したことなかったので、大変勉強になります。
    WordPressからしばらく離れていましたが、他の記事も参考に勉強させていただきます!!

    • 樋口大輔 より:

      さかじさん
      コメントありがとうございます!
      Webの実装、たのしいですよね
      参考にしていただけてよかったです
      今後ともよろしくお願いいたします

あたたかい感想を書く

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

CAPTCHA


キタックCGSCコアメンバー

  • 樋口大輔
  • 小林将太
  • ちゃんまき
  • 高橋どらみ
  • 高橋皓一
  • 笠井
  • 石本
  • 佐藤サバ美
  • 佐久間尭