Вопрос или проблема
Я использую Elementor и ACF на сайте и у меня есть пользовательский тип записи для событий. В Elementor я выставил порядок записей на архивной странице по полю даты начала ACF. Когда пользователь нажимает на событие и переходит на страницу отдельного события, я использую виджет навигации по записям для перехода между записями. Проблема в том, что записи отображаются в порядке меню в навигации, а не по дате поля ACF.
Я хотел бы, чтобы ссылки на предыдущую и следующую запись основывались на поле даты ACF, чтобы, когда пользователь нажимает на любую из них, он переходил к фактической следующей записи по дате.
Мне просто нужна функция, чтобы изменить поведение виджета в Elementor, так как это настройки по умолчанию WordPress.
Я прочитал документацию WordPress, но она не оказалась очень полезной.
Моя тема является дочерней темой Hello Elementor.
Ответ или решение
Для изменения поведения навигации по записям (previous and next post links) в Elementor с использованием кастомного поля даты начала (ACF start date) для типа записи "события", вам потребуется внести некоторые изменения в код вашей темы. Вы уже упомянули, что используете дочернюю тему Hello Elementor, что является правильным подходом для применения кастомизаций.
Шаги для реализации:
-
Создайте функцию для получения следующего и предыдущего события по дате.
Для этого вам нужно будет использовать хук WordPress
get_next_post()
иget_previous_post()
и дополнить их работой с ACF. Давайте создадим функцию, которая будет возвращать следующую и предыдущую запись на основе следования по полю даты.function get_adjacent_event_posts($in_same_term = false, $excluded_terms = '', $taxonomy = 'category') { global $post; $prev_post = get_previous_post($in_same_term, $excluded_terms, $taxonomy); $next_post = get_next_post($in_same_term, $excluded_terms, $taxonomy); if ($prev_post) { $prev_start_date = get_field('start_date', $prev_post->ID); $prev_post->start_date = $prev_start_date; } if ($next_post) { $next_start_date = get_field('start_date', $next_post->ID); $next_post->start_date = $next_start_date; } if ($prev_post && $next_post) { // Сортировка по дате if (strtotime($prev_post->start_date) > strtotime($next_post->start_date)) { return [$next_post, $prev_post]; } return [$prev_post, $next_post]; } return [$prev_post, $next_post]; }
-
Используйте эту функцию в шаблоне единственной записи.
После создания функции, вам нужно получить и вывести ссылки на предыдущие и следующие записи в вашем шаблоне единственной записи события. Это можно сделать в файле
single-event.php
или другом соответствующем шаблоне.list($prev_event, $next_event) = get_adjacent_event_posts(); if ($prev_event) { echo '<a href="' . get_permalink($prev_event->ID) . '">Назад к ' . get_the_title($prev_event->ID) . '</a>'; } if ($next_event) { echo '<a href="' . get_permalink($next_event->ID) . '">Далее к ' . get_the_title($next_event->ID) . '</a>'; }
-
Добавьте кастомный код в файл вашей дочерней темы.
Вставьте вышеуказанный код в файл
functions.php
вашей дочерней темы. Это обеспечит правильное извлечение и отображение навигации на основе даты начала событий.
Проверка и тестирование
После внесения изменений обязательно протестируйте функциональность навигации. Убедитесь, что ссылки корректно ведут на предыдущие и следующие события на основе даты начала, как это задумано.
Заключение
Таким образом, вы сможете настроить элемент навигации Elementor для работы в соответствии с вашими требованиями, базируясь на кастомном поле ACF. Этот подход не только позволяет изменить поведение стандартных функций WordPress, но и делает ваш сайт более удобным для пользователей, что влияет на их общую удовлетворенность и SEO-позиции сайта.