Как я могу запрашивать сообщения и использовать атрибут orderby для заказов в цикле в соответствии с датой meta_value?

Я создаю сайт для театральной компании, и я создаю индекс всех прошлых, текущих и будущих постановок. Я хотел бы, чтобы индекс «заказывал» конечную дату каждого выпуска (тип поля «дата» ACF; «end_date»).

Вот пример моего запроса:

<?php $futureProd = array( 'post_type' => 'productions', 'posts_per_page' => -1, 'meta_key' => 'ending_date', 'orderby' => 'meta_value', 'order' => 'ASC', ); $slider_posts = new WP_Query($futureProd); $array_rev = array_reverse($slider_posts->posts); $slider_posts->posts = $array_rev; ?> 

Также попробовали следующее, добавив альтернативы «meta_value_date», а также «meta_value_num»:

 <?php // query posts $futureProd = array( 'post_type' => 'productions', 'posts_per_page' => -1, 'meta_key' => 'ending_date', 'orderby' => 'meta_value_date', 'order' => 'ASC', ); ?> 

А ТАКЖЕ

 <?php // query posts $futureProd = array( 'post_type' => 'productions', 'posts_per_page' => -1, 'meta_key' => 'ending_date', 'orderby' => 'meta_value_num', 'order' => 'ASC', ); ?> 

Независимо от того, что я пытаюсь, сообщения отказываются заказать themselevs по meta_value, а вместо этого предпочитают заказывать себя по дате публикации по умолчанию.

Я уверен, что я пропустил что-то простое.

У кого-нибудь есть идеи?

Related of "Как я могу запрашивать сообщения и использовать атрибут orderby для заказов в цикле в соответствии с датой meta_value?"

Вы можете указывать тип данных в порядке, например, meta_value_* Возможные значения: «NUMERIC», «BINARY», «CHAR», «DATE», «DATETIME», «DECIMAL», «SIGNED», «TIME», «UNSIGNED».

Попробуй это,

 $futureProd = array( 'post_type' => 'productions', 'posts_per_page' => -1, 'meta_key' => 'ending_date', 'orderby' => 'meta_value_date', 'order' => 'ASC', ); $slider_posts = new WP_Query($futureProd); 

Обратите внимание: для выполнения вышеуказанного кода вам нужно иметь дату в YYYY-MM-DD , если у вас есть дата в другом формате, тогда вам нужно создать свой пользовательский фильтр, чтобы posts_orderby фильтр STR_TO_DATE с STR_TO_DATE функции STR_TO_DATE MySQL.


Формат даты YYYYMMDD

Добавьте это в свою активную тему. Файл function.php вашей активной дочерней темы (или темы). Или также в любых плагинах php-файлов.

 function text_domain_posts_orderby($orderby, $query) { //Only for custom orderby key if ($query->get('orderby') != 'yyyymmdd_date_format') return $orderby; if (!( $order = $query->get('order') )) $order = 'ASC'; global $wpdb; $fieldName = $wpdb->postmeta . '.meta_value'; return "STR_TO_DATE(" . $fieldName . ", '%Y%m%d') " . $order; } add_filter('posts_orderby', 'text_domain_posts_orderby', 10, 2); 

Итак, теперь ваш аргумент WP_Query должен выглядеть так:

 $futureProd = array( 'post_type' => 'productions', 'posts_per_page' => -1, 'meta_key' => 'ending_date', 'orderby' => 'yyyymmdd_date_format', //added custom orderby key 'order' => 'ASC', ); 

Код протестирован и полностью работоспособен.

Справка:

  • Параметры заказа и заказа WP_Query
  • MySQL ORDER BY Поле даты, которое отсутствует в формате даты

Надеюсь это поможет.