jeffk
  • 0
Новичок

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

  • 0

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

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

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

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

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

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

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

      • 0
    • Я вижу сейчас. Меня смутила документация WordPress, в которой говорилось, что «meta_key» и «meta_value» устарели. Я предполагал, что это означает, что я не могу их использовать, но, думаю, это вводило в заблуждение. Спасибо!

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

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

    • 0

Оставить ответ

You must login to add an answer.