Поле даты SCF/ACF не будет работать для исключения записей из цикла.

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

В настоящее время я создаю веб-сайт, на котором нужно показывать предстоящие события. Я строю веб-сайт на теме WordPress Salient и пытаюсь немного настроить его с помощью кода в дочерней теме.

Я изменяю встроенный цикл записями в блоге темы, чтобы вместо этого показывать события. В коде я внес несколько изменений, чтобы отсортировать их в правильном порядке (не по дате публикации, а по дате события), но не могу понять, как исключить события, дата которых уже прошла.

if( $orderby !== ‘view_count’ ) {

$today = date(‘l j F’);
$nectar_blog_arr = array(
‘post_type’ => ‘evenement’,
‘posts_per_page’ => $posts_per_page,
‘post_status’ => ‘publish’,
‘meta-key’ => ‘event_startdate’,
‘meta_query’ => array(
‘relation’ => ‘AND’,
‘date_clause’ => array(
‘key’ => ‘event_startdate’,
‘value’ => $today,
‘type’ => ‘DATE’,
‘compare’ => ‘>=’
),

),
‘orderby’ => array(
‘date_clause’ => ‘ASC’,
),
‘offset’ => $post_offset,
‘category_name’ => $category,
‘paged’ => $paged
);

Есть идеи или советы?

Примечание: Я пробовал много фрагментов кода, которые нашел на этом форуме или других сайтах, но некоторые коды просто ломают цикл и не показывают его вовсе. Без каких-либо ошибок PHP тоже. Странно, да?

Заранее спасибо за всю помощь и предложения!

Ответ или решение

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

Анализ текущего кода

Ваш код для WP_Query выглядит следующим образом:

$nectar_blog_arr = array(
    'post_type' => 'evenement',
    'posts_per_page' => $posts_per_page,
    'post_status' => 'publish',
    'meta_key' => 'event_startdate',
    'meta_query' => array(
        'relation' => 'AND',
        'date_clause' => array(
            'key' => 'event_startdate',
            'value' => $today,
            'type' => 'DATE',
            'compare' => '>='
        ),
    ),
    'orderby' => array(
        'date_clause' => 'ASC',
    ),
    'offset' => $post_offset,
    'category_name' => $category,
    'paged' => $paged
);

Проблемные моменты

  1. Формат даты: Переменная $today формируется с использованием date('l j F'), что может не совпадать с форматом даты, хранящимся в пользовательском поле event_startdate. Вам нужно убедиться, что формат даты в $today и в event_startdate совпадают, например, используя формат Y-m-d, который является стандартным форматом для хранения дат в MySQL.

    Замените строку:

    $today = date('l j F'); 

    на

    $today = date('Y-m-d');
  2. Проверка мета-запроса: Ваша мета-запрос содержит неправильное определение поля meta_key. Можете попробовать удалить строку 'meta_key' => 'event_startdate',, так как это может препятствовать возвращению ожидаемых результатов, особенно если вы работаете с более сложными метаполями.

  3. Структура запроса: Убедитесь, что вы правильно установили параметры meta_query. Важно, чтобы структура мета-запроса была корректной, а отношение между запросами (в данном случае AND) было оправданным.

Оптимизированный код

Вот пример, как можно переписать ваш запрос, чтобы исключить прошедшие события:

$today = date('Y-m-d'); // Используем подходящий формат даты
$nectar_blog_arr = array(
    'post_type' => 'evenement',
    'posts_per_page' => $posts_per_page,
    'post_status' => 'publish',
    'meta_query' => array(
        array(
            'key' => 'event_startdate',
            'value' => $today,
            'compare' => '>=',
            'type' => 'DATE'
        ),
    ),
    'orderby' => array(
        'event_startdate' => 'ASC', // Убедитесь, что это название вашего мета-поля
    ),
    'offset' => $post_offset,
    'category_name' => $category,
    'paged' => $paged
);

Заключение

После изменения кода, обязательно проверьте его в админке WordPress, обновив кэш (если используется) и переиндексируя метаполя, чтобы гарантировать, что запрос к базе данных возвращает правильные результаты.

Если проблемы повторяются, стоит рассмотреть возможность использования WP Debugging, чтобы выявить дополнительные ошибки, которые могут не отображаться в пользовательском интерфейсе.

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

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