Упорядочение по мета-значению И дате НЕ РАБОТАЕТ с запросом wp


Я хочу выбрать сообщения и пользовательский тип сообщения с определенным метазначением (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. Но если они имеют одинаковое значение mb_home, они упорядочиваются по дата ASC.

Если я попытаюсь изменить способ заказа, используя следующий синтаксис:

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

Вместо приведенных выше инструкций orderby и order он просто возвращается к дате, полностью игнорируя значение mb_home.

Все эти результаты совпадают с meta_value вместо meta_value_num. Ничего не меняется.

Пожалуйста, дайте мне несколько советов, потому что я занимаюсь этим уже почти месяц, пробуя все, но безуспешно.

О мастера wordpress! Я взываю к вашему помогите!!

Author: Alevalentini, 2014-08-28

1 answers

Вы должны использовать фильтр 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
Author: bonger, 2014-08-28 22:05:37