Як ви використовуєте orderby з meta_query в Wordpress 3.1?


21

Чи можна замовити мій список користувацьких публікацій після фільтрації за допомогою мета_запиту мета-даними за моїм вибором?

Наприклад, у мене є власний тип публікації під назвою вебінари. Я намагаюсь перелічити всі майбутні вебінари та упорядкувати їх у користувацькому мета-полі під назвою webinar_startDate.

Використовуючи наступний запит, мені вдалося повернути вебінари успішно, виключаючи старі вебінари. Однак вони все одно виходять у порядку, в якому вони були опубліковані, а не веб-семінаром_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_key двічі.


9
Ця відповідь не зовсім вірна. Якщо ви додасте orderby та meta_key за межами існуючого meta_query, результат дійсно буде сортований за наданим ключем - але він також буде включати будь-яку посаду, де встановлена ​​мета-ключ, навіть якщо значення не відповідає критеріям у мета_запиті (принаймні, саме так воно працювало на мене при тестуванні). Кращим способом зробити це може бути передача масиву як парам порядку замовлення, як описано тут: 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',

до зовнішнього масиву?


Я зараз бачу. Мене збентежила документація Wordpress, яка сказала, що "meta_key" та "meta_value" знецінилися. Я припускав, що це означає, що я не можу їх використати, але я думаю, що це вводило в оману. Спасибі!
Джефф К.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.