archiveページを開いた時に、pre_get_postsによる記事の並び替えをしたいのですが、まず日付の新しい順で並び替え、さらに特定のカスタムフィールド(数値型)に入力がないものは、後ろに移動させたいと思っています。
リストで表すと以下のような感じです。
- 2015/02/05 media_id = 2
- 2015/02/03 media_id = 1
- 2015/02/01 media_id = 3
- 2015/02/06 media_id =
- 2015/02/04 media_id =
- 2015/02/02 media_id =
function archive_sort($query) {
if(!is_admin() && $query->is_main_query()) {
if (is_post_type_archive('news')) {
$query->set('order', 'DESC');
$query->set('orderby', 'meta_value date');
$query->set('meta_key', 'media_id');
}
}
return $query;
}
add_filter('pre_get_posts','archive_sort');
そこで、上記のようなコードを記述してみたのですが、下記のような並び順になってしまいます。
- 2015/02/01 media_id = 3
- 2015/02/05 media_id = 2
- 2015/02/03 media_id = 1
- 2015/02/06 media_id =
- 2015/02/04 media_id =
- 2015/02/02 media_id =
カスタムフィールドに値がないものは望み通り後ろの方で日付順なのですが、値があるものはその値による順番になってしまいます。
カスタムフィールドの入力値は関係なく、単に値が入ってるか入ってないかで判断させたいため、この並び順は望ましくありません。
どうか、値があるものは前の方で、ないものは後ろの方で日付順で表示させる方法はないでしょうか?