カスタムフィールドの項目を降順・昇順で並び替えて表示。値がないものも表示させる
カスタムフィールドの項目を降順・昇順で並び替えて表示させるには以下のように実装。カスタムフィールドに値がないものも表示させるために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