
WordPressのカスタムフィールドの比較について
WordPressでは、SQL文などを使ってテーブルを作成しなくても、自身で作ったカスタム投稿にカスタムフィールドを加える事で、要件に合わせた形でデータを蓄積する事ができます。今回記載する内容は、このカスタムフィールドの比較について、あたり前と言えばそうですが、少しだけはまった事がありましたので、メモしておきます。
1.カスタムフィールドの絞り込み
カスタムフィールドからカスタム投稿のデータを絞り込むには、次の関数などを使います。
WP_Query()
などと記載したのは、他にもget_posts()もあるためです。
WP_Query、 get_posts、どちらもWordPressの投稿記事やページなどの投稿タイプを取得するために使用される関数ですが、簡単に、WP_Queryとget_postsの違いも記載しておきます。
主な違いは以下の通りです。
1)返される結果の形式
 WP_Query はWordPressの WP_Query オブジェクトを返しますが、get_posts はWordPressの post オブジェクトの配列を返します。
2)メインループへ与える影響
 WP_Queryは、WordPressのメインクエリ(現在表示されている投稿を含む)を置き換えることができます。これにより、メインクエリが変更され、テンプレートの表示が変更されます。しかし、get_posts はメインクエリを変更しません。
3)クエリのカスタマイズの方法
 WP_Queryはクエリを細かくカスタマイズできるオプションが多数用意されています。一方、get_posts は引数が少なく、クエリのカスタマイズに制限があります。
これらの関数は、条件を指定すると投稿データを絞り込んでくれます。SQLのSELECT文など実行する必要がありません。
 この指定する条件文の一つに、meta_queryというものがあります。このmetaはカスタムフィールドの値を指しており、カスタムフィールドの値で絞り込む事が可能というわけです。
このmeta_queryは、その中にさらに配列を持つことができ、配列の中で、どのフィールドと比較するか、値は何?、条件は?など指定する事ができます。
2.カスタムフィールドの絞り込みの例
| 1 2 3 4 5 6 7 | 'meta_query' => array(                     array(                         'key' => 'products_name',                         'value' => $products_name,                         'compare' => '==',                     ),                 ) | 
こちらの構文は、カスタムフィールド「products_name」の値が、変数$products_nameと同じ値である投稿データで絞り込んでいます。
 もちろん、カスタムフィールド「products_name」はカスタムフィールドですので事前に作成しておく必要があります。
以前、パラメータ項目をコードスニペットとして当ブログでもまとめてますので、こちらもご参考下さい。
3.数字を比較する時は注意が必要!
等しい条件を比較するのは簡単ですが、例えば、値以下や値よりも大きいといった数値の比較をする場合には注意が必要です。
 この場合には、明示的に扱うデータは数字だよ。と指定してあげなければなりません。
 当たり前と言えば当たり前なのですが、今のコーディングは数字型や文字型など意識する事なく操作できてしまうので、意外とはまったりします。
 (変数宣言時のデータ型指定や、計算する時のキャスト、文字→数字、数字→文字、必ず変換していた時代が懐かしい。。)
例えば、カスタムフィールドproducts_price(製品価格)が、ある範囲内であるデータに絞り込むような場合には以下のような記載をします。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 'meta_query' => array(                     'relation' => 'AND',                     array(                         'key' => 'products_price',                         'value' => $select_upper,                         'compare' => '<',                         'type'=>'NUMERIC'                     ),                     array(                         'key' => 'products_price',                         'value' => $select_lower,                         'compare' => '>=',                         'type'=>'NUMERIC'                     )                 ) | 
products_price(製品価格)が、$select_upperより大きくかつ、$select_lower以下のデータで絞り込んでします。
 この時、比較する際にカスタムフィールドの値を数字にするオプションを指定します。
 これが
‘type’=>’NUMERIC’
となります。
意外とはまりますので、覚えておくとよいかなと思います。
WEB DESIGN全てお任せ!ホームページ制作
RishunTradingでは、日本にはないコンセプトや高いデザイン性をもったヨーロッパ製品の輸入販売、及び、Webサイト制作事業などをおこなっております。
「全てお任せ!ホームページ制作」は、ドメイン取得からサーバー設定、レスポンシブルデザイン(スマホ、タブレット対応)、SEO対策がすべて含まれたお得なホームページを制作するサービス商品です。
納品後は「Webサイト運用管理サービス(保守)」を締結しますので、納品後の運用やメンテナンスなどワンステップで対応。お客様は安心して本業に集中する事ができます。
しかもなんと、「全てお任せ!ホームページ制作」は、¥100,000!(税別)で提供しております。
本業が忙しい中小企業様に大変ご好評を頂いている商品です。
 - 独自ドメイン取得 
 - サーバー開設&設定 
 - レイアウト設計 
 - レスポンシブルデザイン 
 (*1)
 - 検索エンジン最適化 
 (SEO対策)
 - 場所Maps 
 - お問い合わせフォーム 
 - SSL化 
 - 各種SNS連携 
 - 運用マニュアル 


