WordPressでカスタムフィールドでソートしたい場合、下記の方法が一般的です。
$args = array(
'post_type' => 'post',
'meta_key' => 'メタキー',
'orderby' => 'meta_value_num',
'order' => 'DESC'
);
ただ、この方法だと過去記事に meta_key が存在しないため、過去記事が表示されなくなってしまいます。
そこで、meta_query を使い表示させる方法をとります。
それがこのコードです。
$args = array(
'post_type' => 'post',
'orderby' => 'メタキー',
'order' => 'desc',
'meta_query' => array(
array(
'key' => 'メタキー',
'compare' => 'NOT EXISTS'
),
array(
'key' => 'メタキー',
'compare' => 1
),
'relation'=>'OR',
),
);
ポイントは compare に NOT EXISTS を使い、キーが存在するものとしないものをORでくっつけることですね。