Как использовать orderby с meta_query в WordPress 3.1?

2 мар. 2011 г., 20:59:39
Просмотры: 23.2K
Голосов: 22

Возможно ли отсортировать мой список пользовательских записей после фильтрации с помощью 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, объясняющий это.

Кто-нибудь может помочь? Заранее спасибо.

0
Все ответы на вопрос 2
1
17

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

'orderby' => 'meta_value', 
'meta_key' => '_events_meta',

в дополнение к meta_query, так как эти строки указывают, как сортировать результаты запроса. То есть да, вы можете указать один и тот же meta_key дважды.

2 мар. 2011 г. 21:38:55
Комментарии

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

MathSmath MathSmath
3 апр. 2012 г. 19:59:33
1

Я использую следующий код для своих пользовательских записей типа 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',

во внешний массив?

2 мар. 2011 г. 21:34:30
Комментарии

Теперь понятно. Я запутался в документации WordPress, где говорилось, что 'meta_key' и 'meta_value' устарели. Я предположил, что их нельзя использовать, но, видимо, это было вводящее в заблуждение утверждение. Спасибо!

Jeff K. Jeff K.
2 мар. 2011 г. 23:55:47