Вопрос или проблема
У меня есть раздражающая проблема. Я использую date_query
, как указано в кодексе:
<?php
$today = getdate();
$args = array(
'post_type' => 'Lighting',
'post_status' => 'publish',
'posts_per_page' => 1,
'date_query' => array(
array(
'year' => $today['year'],
'month' => $today['mon'],
'day' => $today['mday'],
),
),
);
$the_query = new WP_Query( $args );
Я могу отображать пользовательские посты, как ожидалось, если исключу 'day'
, но не получаю постов, когда он включен в запрос. Я использую Advanced Custom Fields Pro с date-picker
. Я понятия не имею, почему это происходит, и я безуспешно искал, чтобы понять, почему мой date_query
не работает. Я могу вывести дату, поэтому я не понимаю, в чём проблема.
/****** ОТВЕТ НА ОТВЕТЫ ******/
Спасибо за ответы. Я сделал meta_query в том, что, как я думаю, является правильным форматом даты, но я все еще не могу запросить только сегодняшний пост. Вот новый запрос:
<?php // Давайте получим необходимые данные, чтобы выполнить цикл
$args = array(
'post_type' => 'carillon', // Сообщаем WordPress, какой тип записи нам нужен
'orderby' => 'meta_value', // Мы хотим организовать события по дате
'meta_key' => 'date_of_lighting', // Берём поле "date_of_event", созданное с помощью плагина "date-picker" (хранится в формате ‘YYYYMMDD’)
'posts_per_page' => '1', // Покажем только один пост.
'meta_query' => array( // WordPress нашел все результаты, теперь возвращаем только событие на сегодняшнюю дату
array(
'key' => 'date_of_lighting', // Проверяем поле "date_of_lighting"
'value' => date("Y-M-D"), // Устанавливаем сегодняшнюю дату (обратите внимание на аналогичный формат)
'compare' => '=', // Возвращаем только сегодняшний пост
'type' => 'NUMERIC' // Сообщаем WordPress, что работаем с числами
)
)
);
Любые предложения? Еще раз спасибо.
/******** РЕШЕНИЕ **********/
Привет всем,
Итак, я нашел решение, которое работает. Я изменил тип на “DATE”. Интересно, что в других примерах, когда люди хотят показать сегодняшнюю дату и далее, они используют тип “Numeric”. Полагаю, это имеет некоторый смысл, но я углублюсь в кодекс, чтобы понять это лучше. Спасибо всем за помощь. Вот решение, которое работает:
<?php // Давайте получим необходимые данные, чтобы выполнить цикл
$args = array(
'post_type' => 'carillon', // Сообщаем WordPress, какой тип записи нам нужен
'orderby' => 'meta_value', // Мы хотим организовать события по дате
'meta_key' => 'date_of_lighting', // Берём поле "date_of_event", созданное с помощью плагина "date-picker" (хранится в формате ‘YYYYMMDD’)
'posts_per_page' => '1', // Покажем только один пост.
'meta_query' => array( // WordPress нашел все результаты, теперь возвращаем только событие на сегодняшнюю дату
array(
'key' => 'date_of_lighting', // Проверяем поле "date_of_lighting"
'value' => date("Y-m-d"), // Устанавливаем сегодняшнюю дату (обратите внимание на аналогичный формат)
'compare' => '=', // Возвращаем только сегодняшний пост
'type' => 'DATE' // Сообщаем WordPress, что работаем с датой
)
)
);
Как сказано в комментариях, вы должны использовать meta_query
.
Для получения помощи по запросу постов по полю ACF вы можете обратиться к документации ACF:
https://www.advancedcustomfields.com/resources/query-posts-custom-fields/
$args = array(
'numberposts' => -1,
'post_type' => 'event',
'meta_key' => 'location',
'meta_value' => 'Melbourne'
);
// запрос
$the_query = new WP_Query( $args );
Вот решение, ребята. Я прокомментировал каждую строку, чтобы прояснить, что происходит. Надеюсь, всё понятно и правильно 🙂
Я благодарен за помощь, которую получил от этого удивительного сообщества.
<?php // Давайте получим необходимые данные, чтобы выполнить цикл
$args = array(
'post_type' => 'carillon', // Сообщаем WordPress, какой тип записи нам нужен
'orderby' => 'meta_value', // Мы хотим организовать события по дате
'meta_key' => 'date_of_lighting', // Берём поле "date_of_event", созданное с помощью плагина "date-picker" (хранится в формате ‘YYYYMMDD’)
'posts_per_page' => '1', // Покажем только один пост.
'meta_query' => array( // WordPress нашел все результаты, теперь возвращаем только событие на сегодняшнюю дату
array(
'key' => 'date_of_lighting', // Проверяем поле "date_of_lighting"
'value' => date("Y-m-d"), // Устанавливаем сегодняшнюю дату (обратите внимание на аналогичный формат)
'compare' => '=', // Возвращаем только сегодняшний пост
'type' => 'DATE' // Сообщаем WordPress, что работаем с числами
)
)
);
$the_query = new WP_Query($args); ?>
<?php if ( $the_query->have_posts() ) : ?>
<!-- цикл -->
Ответ или решение
Конечно, давайте разберемся в возникшей проблеме и обеспечим решение. Исходя из описанного сценария, вы сталкиваетесь с трудностями при использовании date_query
в WordPress для выборки публикаций по конкретному дню, несмотря на то, что месяц и год работают безупречно. Давайте рассмотрим, почему это может происходить и как вы можете исправить ситуацию.
Предыстория проблемы
У вас есть пользовательские публикации, вероятно связанные с определенной датой, и они хранятся в формате YYYYMMDD
благодаря использованию плагина Advanced Custom Fields (ACF) с функцией выбора даты. Проблема возникает при использовании date_query
, когда day
параметр не работает так, как предполагалось.
Решение проблемы
-
Понимание формата данных: Посты с настраиваемой датой, сохраненные через ACF, не всегда полностью совместимы с базовым кодом
date_query
WordPress. Это связано с тем, как WordPress извлекает даты из стандартных объектов публикации против пользователей полей ACF. -
Использование
meta_query
вместоdate_query
: Когда дата сохранена как настраиваемое поле, имеет смысл использоватьmeta_query
для фильтрации публикаций. Это позволяет больше контролировать извлечение данных непосредственно из мета-значений. -
Установите правильный тип данных: Использующиеся вами поля даты в формате
YYYYMMDD
необходимо обрабатывать какDATE
в параметрахmeta_query
, чтобы WordPress правильно интерпретировал их.
Пример исправленного кода
// Получение данных для дальнейшей фильтрации
$args = array(
'post_type' => 'carillon', // Указать требуемый тип публикации
'orderby' => 'meta_value', // Сортировка по дате
'meta_key' => 'date_of_lighting', // Использование поля даты из ACF
'posts_per_page' => '1', // Выводить только одну публикацию
'meta_query' => array( // Определение условий для вывода публикаций
array(
'key' => 'date_of_lighting', // Поле мета данных даты
'value' => date("Y-m-d"), // Текущая дата в корректном формате
'compare' => '=', // Сравнение только с сегодняшней датой
'type' => 'DATE' // Указание, что мы работаем с датой
)
)
);
$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
// Цикл для вывода публикаций
endif;
Оптимизация для SEO и экспертизы
-
Ключевые слова: Включайте ключевые слова, такие как ‘WordPress date_query issue’, ‘Advanced Custom Fields date’, ‘meta_query date filtering’, чтобы усилить обнаруживаемость вашего ответа в поисковых системах.
-
Поддержка документацией: Рекомендуется добавить ссылки на документацию ACF и WordPress Codex для лучше понимания процесса.
Заключение
Решение проблемы может казаться сложным, но с правильным подходом и пониманием внутренней оболочки WordPress и методологии ACF все становится проще. Всегда полезно исследовать документацию и сообщества для нахождения наилучших практик и новых решений.