Несколько произвольных полей для 'orderby' в 'WP_Query'
Я пытаюсь отсортировать записи блога сначала по полю 'city', а затем по полю 'street_name' внутри каждого города. Не получается добиться правильной сортировки по алфавиту для названий улиц. Я использую WP_Query:
<?php
$args = array(
'post_type'=> 'property', // Тип записи: недвижимость
'meta_query' => array( // Запрос по мета-полям
array(
'relation' => 'AND' , // Логическое И
array(
'meta_key' => 'city', // Ключ поля: город
'orderby' => 'meta_value', // Сортировка по значению
'order' => 'ASC' // По возрастанию
),
array(
'meta_key' => 'street_name', // Ключ поля: название улицы
'orderby' => 'meta_value', // Сортировка по значению
'order' => 'ASC' // По возрастанию
),
)
), Есть идеи?

meta_query
и orderby
— это отдельные параметры, которые вы просто объединяете в массив. Вам нужно сначала задать один, затем другой.
Например:
<?php
$args = array(
'post_type' => 'property',
'meta_query' => array(
array(
'relation' => 'AND',
'city_clause' => array(
'key' => 'city',
'compare' => 'EXISTS',
),
'street_clause' => array(
'key' => 'street_name',
'compare' => 'EXISTS',
),
)
)
'orderby' => array(
'city_clause' => 'desc',
'street_clause' => 'desc',
)
)
?>
https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters

Спасибо, @Nath! Я попробовал это сделать, но у меня всё равно не получается отсортировать названия улиц по алфавиту...

Понадобилось некоторое время, чтобы разобраться, как сортировать по числовым значениям с несколькими мета-ключами, поскольку нельзя просто использовать orderby meta_value_num. Вместо этого нужно указать тип numeric в meta_query. Это рабочий код из продакшена.
$meta_query = array(
'relation' => 'AND',
'query_one' => array(
'key' => '_rama_ads_type'
),
'query_two' => array(
'key' => '_rama_ads_order',
'type' => 'NUMERIC',
),
);
$order_by = array(
'query_one' => 'ASC',
'query_two' => 'DESC',
);
$query->set( 'meta_query', $meta_query );
$query->set( 'orderby', $order_by );

Вам нужно выполнить сортировку по определенным условиям для meta_query.
Эта ссылка содержит всю необходимую информацию, которая поможет вам разобраться с синтаксисом и заставить все работать.
https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/

Попробуйте этот вариант, возможно, он поможет.
<?php
$args = array(
'post_type' => 'Sports', // Тип записи
'meta_query' => array(
array(
'key' => 'league_count', // Ключ метаполя
'orderby' => 'meta_value_num', /* Используйте только если
ключ хранит числовое значение, иначе используйте 'meta_value' */
'order' => 'ASC' // Сортировка по возрастанию
),
array(
'key' => 'matches_count', // Ключ метаполя
'orderby' => 'meta_value_num', // Сортировка по числовому значению
'order' => 'ASC' // Сортировка по возрастанию
),
),
);
$query = new WP_Query( $args ); // Создание нового запроса
?>
