web-dev-qa-db-ja.com

Meta_valueと日付による順序付けがwp_queryで機能しない

先週の特定のメタ値(mb_home!= 0)を持つ投稿とカスタム投稿タイプを選択し、それらをmb_homeで並べ替えます。それらが同じmb_home値を持っているなら、私はそれらを日付順に並べるべきです。どちらの順序もDESCである必要があります。

私はこのクエリを使用していますが、それだけでは動作しません:

$query = new WP_Query( array(
            'post_type' => array ('post', 'aggregato'),
            'posts_per_page' => 13,
            'post__not_in' => $linked_posts,
            'meta_key' => 'mb_home',
            'orderby' => 'meta_value_num date',
            'order' => 'DESC',
            'meta_query' => array(
                                array(
                                        'key' => 'mb_home',
                                        'value' => '0',
                                        'compare' => '>',
                                    )
                            ),
            'date_query' => array(
                                    'after' => '1 week ago',
                            )
            ));

dateをドロップして'order by' => 'meta_value_num'を使用した場合、クエリはmb_home DESCによって正しく順序付けされた結果を返してくれます。しかし、それらが同じmb_home値を持つ場合、それらは日付ASCによって順序付けられます。

この構文を使用して、商品の注文方法を変更しようとすると、次のようになります。

'orderby' => array( 'meta_value_num' => 'DESC', 'date' => 'DESC' ),

上記のorderby文とorder文の代わりに、mb_home値を完全に無視してDESCに戻るだけです。

これらすべての結果は、meta_valueではなくmeta_value_numでも同じです。何も変わりません。

どうか、私にいくつかの指針を与えてください。私はこれをほぼ一ヶ月間過ごしてきましたが、すべてを試しても成功しませんでした。

ああワードプレスのマスター!私はあなたの助けを呼ぶ!

2
Alevalentini

Moでこれを行うにはposts_orderbyフィルタを使用する必要があります。

function wpse159469_posts_orderby( $orderby, $query ) {
    return implode( ' DESC,', explode( ',', str_replace( array(' ASC', ' DESC' ), '', $orderby ) ) ) . ' DESC';
}

それからあなたの質問のまわりで:

add_filter( 'posts_orderby', 'wpse159469_posts_orderby', 10, 2 );
$query = new WP_Query( array( // etc
remove_filter( 'posts_orderby', 'wpse159469_posts_orderby', 10 );
2
bonger