Параметр day не принимается в date_query, но принимаются параметры month и year для пользовательского сообщения.

Вопрос или проблема

У меня есть раздражающая проблема. Я использую 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 параметр не работает так, как предполагалось.

Решение проблемы

  1. Понимание формата данных: Посты с настраиваемой датой, сохраненные через ACF, не всегда полностью совместимы с базовым кодом date_query WordPress. Это связано с тем, как WordPress извлекает даты из стандартных объектов публикации против пользователей полей ACF.

  2. Использование meta_query вместо date_query: Когда дата сохранена как настраиваемое поле, имеет смысл использовать meta_query для фильтрации публикаций. Это позволяет больше контролировать извлечение данных непосредственно из мета-значений.

  3. Установите правильный тип данных: Использующиеся вами поля даты в формате 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 все становится проще. Всегда полезно исследовать документацию и сообщества для нахождения наилучших практик и новых решений.

Оцените материал
Добавить комментарий

Капча загружается...