カスタムフィールドの項目を降順・昇順で並び替えて表示。値がないものも表示させる

カスタムフィールドの項目を降順・昇順で並び替えて表示させるには以下のように実装。カスタムフィールドに値がないものも表示させるためにmeta_queryにはNOT EXISTSとEXISTSの両方を使用している

なぜかクエリにmeta_keyをsetするとNOT EXISTSが表示されないので、meta_keyはsetしていない

if ( get_query_var('paged') ) { $paged = get_query_var('paged'); }
elseif ( get_query_var('page') ) { $paged = get_query_var('page'); }
else { $paged = 1; } //ページ数取得

//metaクエリの検索配列を作成
$meta_query = array();
$meta_query['relation'] = 'OR';
$meta_query[] = array(
 'key' => 'rate',
 'compare' => 'NOT EXISTS', // 値がないものも検索範囲に含める
 'value' => '' // なんか必要らしい
);
$meta_query[] = array(
 'key' => 'rate',
 'compare' => 'EXISTS', //値があるものも検索範囲に含める
);
//metaクエリの検索配列を作成終了

$args = array(
 'post_type' => 'post', //投稿タイプはPOSTのみ
 'cat' => 3463, //カテゴリ指定
 //'meta_key' => 'rate', //NOT EXISTSとEXISTSを同居させる場合はこのmeta_keyがあるとうまく動作しないのでコメントアウト
 'orderby' => 'meta_value', //並び替え要素
 'order' => 'DESC',//昇順(ASC)は小さい順、降順(DESC)は大きい順
 'paged' => $paged, //ページ数
 'meta_query' => $meta_query,
);

$wp_query = new WP_Query( $args );

参考URL:https://wordpress.stackexchange.com/questions/80303/query-all-posts-where-a-meta-key-does-not-exist

参考URL:WordPressのWP_Queryでよく使うコードスニペット

コメントを残す

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