Упорядочение по мета-значению И дате НЕ РАБОТАЕТ с запросом 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! Я взываю к вашему помогите!!
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 );