Как вы используете orderby с meta_query в Wordpress 3.1?

21

Можно ли упорядочить мой список пользовательских сообщений после фильтрации с помощью meta_query по метаданным по моему выбору?

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

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

Джефф К.
источник

Ответы:

17

новый meta_queryмассив выбирает, какие сообщения возвращает запрос. Так что да, вы указываете «ключ» в этом meta_query, но вы все еще можете использовать старый метод

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

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

соматический
источник
9
Этот ответ не совсем правильный. Если вы добавите orderby и meta_key вне существующего meta_query, результат действительно будет отсортирован по предоставленному ключу - но он также будет включать в себя любую публикацию, в которой установлен этот мета-ключ, даже если значение не соответствует критериям в meta_query (по крайней мере, так у меня работало в тестировании). Лучшим способом сделать это может быть передача массива в качестве параметра orderby, как описано здесь: core.trac.wordpress.org/ticket/17065#comment:14
MathSmath
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.0
источник
Я вижу сейчас. Меня смутила документация Wordpress, в которой говорилось, что meta_key и meta_value устарели. Я предполагал, что это означало, что я не мог использовать их, но я предполагаю, что это вводило в заблуждение. Благодарность!
Джефф К.