投稿情報を連想配列で参照する投稿日の検索が自由自在に時代はWP_Queryなのか検索ワード「-10,000円」を検索できるようにしたい標準で使用できる数少ないショートコード[caption]とはこの記事は最後に更新してから1年以上経過しています。先週3回にわたってtax_queryパラメータを使ったカテゴリーや投稿タグ、投稿フォーマットの絞り込みを整理したが、その途中で目に付いたのが'meta_query'パラメータ。この'meta_query'パラメータは、カスタムフィールドの絞り込み条件を指定するためのもので、3.2で登場した新しいパラメータのようだ。カスタムフィールド関連パラメータのおさらいから。query_posts関数でカスタムフィールドを使うケースとしては、特定のカスタムフィールドが設定されているものを絞り込む場合と、カスタムフィールドの値でソートする場合がある。);といった感じで記述できる。array(array('key'=>'ranking','value'=>'1'))));といった感じになる。条件指定の'key'にはカスタムフィールドの名前として'ranking'を、'value'には'1'を指定することで、'ranking'の値が'1'の投稿を絞り込んでいる。この'meta_query'パラメータは、先週紹介した'tax_query'パラメータと同じような使い方ができるが、条件指定の連想配列の中身が若干違うので注意したい。データ型と多彩な条件指定が可能カスタムフィールドの値は基本的に文字列形式で保存されているが、それらは文字列としてではなく、数値、日時として使用することもあるだろう。'meta_query'パラメータでは、データ型を指定することで、数値や日時として条件指定できる。使用できるデータ型は次の通り。意味'CHAR'文字'NUMERIC''SIGNED'の別名'DECIMAL'浮動小数点数'SIGNED'整数(符号あり)'UNSIGNED'整数(符号なし)'DATE'日付'DATETIME'日時'TIME'時刻'BINARY'バイナリーまた指定できる条件指定は次の通り。数値系・日時系これらの条件指定は、見てわかる通りSQLの条件指定に共通している。基本的な使い方それぞれの条件の使い方は、次の通りである。array(array('key'=>'addr1','value'=>'東京都','compare'=>'='))));※この'='は、'compare'の指定を省略した時に適用される条件だが、きちんと記述した方がわかりやすいと思う。array(array('key'=>'price','value'=>'500','compare'=>'>','type'=>'NUMERIC'))));※数値の条件は'type'の指定を忘れずに。array(array('key'=>'visited_at','value'=>'2011/09/15','compare'=>'<','type'=>'DATE'))));※日時の条件は'type'の指定を忘れずに。LIKE'の'value'は、SQLのように'%'を付ける必要はない(query_posts(WP_Query)の実行時、値の前後に'%'が付与されるため)。'%'を含んだ文字を調べる場合は、そのまま値としてそのまま指定する(例:'value'=>'100%')。BETWEEN','type'=>'TIME'))));複数の条件を組み合わせるここまでは単純な条件1つのみを指定した場合について紹介してきたが、これらの条件は複数を組み合わせることができる。array(array('key'=>'addr1','value'=>'東京都','compare'=>'='),array('key'=>'price','value'=>'500','compare'=>'>=','type'=>'NUMERIC'),'relation'=>'AND')));'relation'には'AND'か'OR'を指定できる。省略した場合は'AND'になり、配列で指定したすべての条件を満たすのみがマッチする。),'compare'=>'BETWEEN','type'=>'TIME'),'relation'=>'OR')));いくつか注意点'meta_query'パラメータは、SQLの知識があれば使いこなしは容易だろう。使いこなす上でポイントの1つは、大小や範囲指定の条件では必ず数値系や日時系のデータ型を指定すること。データ型の指定を忘れると、意図した検索結果を得ることができない。あとは便利だからといって、複雑な条件の組み合わせることはできるだけ避けた方がいい。'LIKE'条件との組み合わせはデータベースの検索処理を複雑にしてしまい、結果的に検索時間が長くなってしまう可能性が高い。最後に'meta_query'パラメータ使用時の'orderby'パラメータで'meta_key'を指定した場合の振る舞いについて少しだけ。このページの冒頭付近で触れたように'orderby'パラメータで'meta_key'を指定し、'meta_key'パラメータでカスタムフィールドの名前を指定することで、そのカスタムフィールドの値に従って検索結果をソートできるのだが、'meta_query'パラメータで指定した条件によっては意図した並び順にならないケースがあった。将来的に改善されるとは思うが、カスタムフィールドによるソートは注意が必要だろう。)パラメータ$dで指定したフォーマットで投稿日を取得する。)PHPバージョンの互換性を調べる。)投稿情報が指定したカテゴリーに属しているか調べる。)IDを指定してカテゴリー情報を取得する。)WordPressシステムの関数にアクション関数を追加する。©12NetWordPress私的マニュアル主にjQueryのメモPHPExcelのノートWebの。