[WordPress] カスタムフィールドで絞り込んで一覧表示する
- 公開日:2014/11/19
WordPressでカスタムフィールドの値によって投稿を絞り込む方法のメモです。
カスタムフィールドが特定の値の投稿を取得する
カスタムフィールドが特定の値の投稿を取得する方法です。
例として、投稿タイプ『test』で『city』というカスタムフィールドの値が『神戸』という投稿を絞り込んで取得します。
投稿タイプ(post_type):test
カスタムフィールドキー(meta_key):city
カスタムフィールド値(meta_value):神戸
$args = Array( 'post_type' => 'test', 'posts_per_page' => -1, 'meta_key' => 'city', 'meta_value' => '神戸' ); $the_query = new WP_Query($args); if($the_query -> have_posts()): while($the_query -> have_posts()): $the_query -> the_post(); //ここに処理を記述 endwhile; endif; wp_reset_postdata();
posts_per_pageは-1で全件取得です。
以後、7行目以降の記述は同じなので省略します。今後は条件部分だけの記述にします。
カスタムフィールドの値で並び替える
今度はカスタムフィールドの値で並び替える方法です。
例として、カスタムフィールドキーが『city』の投稿をそのカスタムフィールドの値で降順(DESC)に並び替えます。
$args = Array( 'post_type' => 'test', 'posts_per_page' => -1, 'meta_key' => 'city', 'orderby' => 'meta_value', 'order' => 'DESC' );
※明言どおり条件部分だけの記述にしました。
meta_queryを使って条件を指定する
meta_queryを使うとパラメータが異なり、違った条件指定ができるようになります。
例えばLIEK検索。『address』というカスタムフィールドに『神戸市』が含まれている投稿を取得する場合
$args = Array( 'post_type' => 'test', 'posts_per_page' => -1, 'meta_query' => array(array( 'key' => 'address', 'value' => '神戸市', 'compare' => 'LIKE' )) );
SQLのように『%』付ける必要はありません。WP_Query実行時に値の前後に自動で『%』が付与されるからです。
LIKEだけでなく、NOT LIKEやINなども指定できます。
使用できるパラメーターは以下の「5.12 カスタムフィールドパラメータ』を参考にしてください。
関数リファレンス/WP Query
もっと複雑な条件を指定してみる
meta_queryを使えば、もっと複雑な条件も指定することができるようになります。
例として、カスタムフィールド『pref』が『兵庫県』のみに絞り込み、カスタムフィールド『address』の値で昇順に並び替えてみます。
$args = Array( 'post_type' => 'test', 'posts_per_page' => -1, 'meta_key' => 'address', 'orderby' => 'meta_value', 'order' => 'ASC', 'meta_query' => array(array( 'key' => 'pref', 'value' => '兵庫県' )) );
他にも、カスタムフィールド『pref』が『兵庫県』のみに絞り込み、カスタムフィールド『city』の値が『西宮』『尼崎』『伊丹』以外の投稿を取得する場合は、以下のようになります。
$no_cities = array('西宮', '尼崎', '伊丹'); $args = Array( 'post_type' => 'test', 'posts_per_page' => -1, 'meta_key' => 'pref', 'meta_value' => '兵庫県', 'meta_query' => array(array( 'key' => 'city', 'value' => $no_cities, 'compare' => 'NOT IN' )) );
いろんな絞り込みができるようになるのでとても便利です。