サポート » 使い方全般 » pre_get_postsで、カスタムフィールドの有無だけを判断して並び替えしたい

  • muro

    (@muromuro)


    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 =

    カスタムフィールドに値がないものは望み通り後ろの方で日付順なのですが、値があるものはその値による順番になってしまいます。
    カスタムフィールドの入力値は関係なく、単に値が入ってるか入ってないかで判断させたいため、この並び順は望ましくありません。

    どうか、値があるものは前の方で、ないものは後ろの方で日付順で表示させる方法はないでしょうか?

  • トピック「pre_get_postsで、カスタムフィールドの有無だけを判断して並び替えしたい」には新たに返信することはできません。