Intereting Posts
Добавить пользовательское поле для публикации с некоторой частью URL-адреса в качестве значения Перепишите пользовательскую таксономию, но только родительские элементы Установка старой версии плагина из панели администратора? цитирует проблему в очень простом sql использование фильтров для функции из класса Звуковой тег MediaElement не отображается исключить сообщение из цикла, если оно находится в категории, но не во многих категориях Получить главный термин с суб-термина в Woocommerce Веб-сайт отключается при импорте резервной копии (внутренний сервер 500) Остановить wordpress от добавления тегов html, но не удалить мои собственные теги? Изменение URL входа для целей безопасности Как создать пользовательское поле для выбора изображения? Добавить базу категорий в URL в пользовательском типе / таксономии Публикация только URL-адреса Facebook без полного фрагмента кода post_author для wp_insert_attachment

Запросить текущие и будущие события, упорядоченные по дате начала

Используя расширение пользовательского пользовательского ввода, я создал пользовательский пост-тип «Событие», поля которого заполняются с использованием настраиваемых полей (созданных с помощью расширенных пользовательских полей расширения), таких как «дата-дебют» и «дата-финал», ,

На странице архива, посвященной этому пост-типу, я пытаюсь отобразить 10 следующих (текущих или будущих) событий, упорядоченных по хронологии по дате начала.

Кажется, что сортировка частично в порядке; но он больше не работает, когда я добавляю тесты по датам, и в любом случае они тоже не работают.

Вот мой код:

$current_date = date('ymd'); $my_query = new WP_Query( array ( 'post_type' => 'mna_event', 'posts_per_page' => 10, 'orderby' => 'meta_value_num', 'meta_key' => 'date_debut', 'order' => 'ASC', 'meta_query' => array ( 'relation' => 'OR', array ( 'key' => 'date_debut', 'value' => $current_date, 'compare' => '>=' ), array ( 'key' => 'date_fin', 'value' => $current_date, 'compare' => '>=' ) ) ) ); 

Совет по этому вопросу будет очень признателен. благодаря

Это происходит из-за отношения OR к meta_query и того, как WordPress генерирует фактическую строку запроса. Вам необходимо оставить meta_key и meta_key из аргументов запроса и подключиться к фильтру posts_clauses чтобы изменить where и orderby фрагменты запроса:

 function wpse_130954_orderby_fix($pieces){ global $wpdb; $pieces['where'] .= " AND $wpdb->postmeta.meta_key = 'date_debut'"; $pieces['orderby'] = "$wpdb->postmeta.meta_value ASC"; return $pieces; } 

Добавьте фильтр перед настройкой объекта WP_Query, а затем обязательно удалите его после запуска запроса, чтобы не влиять на другие запросы:

 add_filter( 'posts_clauses', 'wpse_130954_orderby_fix', 20, 1 ); $current_date = date_i18n('Ym-d'); $my_query = new WP_Query( array ( 'post_type' => 'mna_event', 'posts_per_page' => 10, 'meta_query' => array ( 'relation' => 'OR', array( 'key' => 'date_debut', 'value' => $current_date, 'compare' => '>=', 'type' => 'DATE' ), array( 'key' => 'date_fin', 'value' => $current_date, 'compare' => '>=', 'type' => 'DATE' ) ) ) ); $result = $my_query->posts; remove_filter( 'posts_clauses', 'wpse_130954_orderby_fix', 20 ); 

UPDATE: используйте yy-mm-dd формат для полей даты в настройках ACF. ( yy-mm-dd в JS / ACF == Ymd в формате даты и времени PHP / MySQL) Я обновил код выше для этого формата. (обновлен формат $current_date и добавлен 'type' => 'DATE' в meta_query )