Порядок записей в пользовательских Wordpress запросах ASC/DESC не такой, как ожидалось

У меня есть пользовательский запрос Wordpress, который выглядит следующим образом:

$args = array(
    'post_type' => 'publication',
    'post_status' => 'publish',
    'category_name' => 'my-category',
    'posts_per_page' => 20,
    'orderby' => 'publication_year',
    'order' => 'DESC',
    'paged' => $paged
);
$loop1 = new WP_Query($args);

Я запрашиваю пользовательский тип сообщения, желая только сообщения с определенной категорией. FWIW, я создал тип поста, используя PODS. Запрос работает правильно с одним небольшим исключением - order пункт:

orderby поле относится к date поле с именем "publishing_year", в котором отображаются только значения года 2015, 2014, 2013 и т. д., но в базе данных содержатся полные даты, например "2013-01-18" и аналогичные.

Теперь заказ, который я получаю с помощью вышеуказанного запроса, 2013, 2014, 2015 - хотя order является DESC, для которого я бы ожидал обратного. Если я изменю это на ASCЯ получаю 2015, 2014, 2013!

Я не понимаю этого - я бы ожидал, что в порядке возрастания будет 2013, 2014, 2015 и т. Д. Где я ошибаюсь?

1 ответ

Решение

publication_year не столбец в wp_posts Таблица. Смотрите описание базы данных WordPress. Если orderby параметр недействителен, WordPress вернется к сортировке по умолчанию, которая является post_date колонка.

Если это мета-значение, вы должны использовать:

$args = array(
    'post_type' => 'publication',
    'post_status' => 'publish',
    'category_name' => 'my-category',
    'posts_per_page' => 20,
    'orderby' => 'meta_value_num',
    'meta_key' => 'publication_year',
    'order' => 'DESC',
    'paged' => $paged
);

Смотрите кодекс WordPress для получения дополнительной информации.

Другие вопросы по тегам