Как использовать orderby с meta_query в WordPress 3.1?
Возможно ли отсортировать мой список пользовательских записей после фильтрации с помощью meta_query по выбранным мета-данным?
Например, у меня есть пользовательский тип записи под названием webinars. Я пытаюсь вывести список всех предстоящих вебинаров и отсортировать их по пользовательскому мета-полю webinar_startDate.
Используя следующий запрос, я смог успешно получить вебинары, исключив прошедшие. Однако они все еще выводятся в порядке их публикации, а не по webinar_startDate.
<?php $my_array = array(
'meta_query' => array(
array(
'key' => 'webinar_startDate',
'value' => date("Y-m-d H:i:s"),
'compare' => '>=',
'type' => 'DATETIME'
)
),
'orderby' => 'meta_value',
'post_type' => 'webinars',
'posts_per_page' => 20,
'order' => 'ASC'
); ?>
Я подозреваю, что из-за изменений между версиями 3.0 и 3.1 использование orderby => meta_value, вероятно, изменилось, но я не могу найти ответ в документации WordPress, объясняющий это.
Кто-нибудь может помочь? Заранее спасибо.

новый массив meta_query
определяет, какие записи возвращает запрос. То есть да, вы указываете 'key' внутри этого meta_query
, но вы также можете использовать старый метод
'orderby' => 'meta_value',
'meta_key' => '_events_meta',
в дополнение к meta_query, так как эти строки указывают, как сортировать результаты запроса. То есть да, вы можете указать один и тот же meta_key дважды.

Этот ответ не совсем верен. Если вы добавите orderby и meta_key вне существующего meta_query, результат действительно будет сортироваться по указанному ключу — но при этом он также включит любую запись, где этот мета-ключ установлен, даже если значение не соответствует критериям в meta_query (по крайней мере, так работало у меня при тестировании). Лучший способ сделать это — передать массив в качестве параметра orderby, как описано здесь: http://core.trac.wordpress.org/ticket/17065#comment:14

Я использую следующий код для своих пользовательских записей типа events
, чтобы получить все записи в цикле.
$evtLoop = new WP_Query(array('post_type' => 'events',
'posts_per_page' => 10,
'orderby' => 'meta_value',
'meta_key' => '_events_meta',
'order'=>'DESC'));
Думаю, вы используете свой код примерно таким же образом. Возможно, вам не хватает параметра meta_key
с именем мета-поля для сортировки. Возможно, поможет, если вы добавите
'meta_key' => 'webinar_startDate',
во внешний массив?
