Навигация по записям Elementor

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

Я использую Elementor и ACF на сайте и у меня есть пользовательский тип записи для событий. В Elementor я выставил порядок записей на архивной странице по полю даты начала ACF. Когда пользователь нажимает на событие и переходит на страницу отдельного события, я использую виджет навигации по записям для перехода между записями. Проблема в том, что записи отображаются в порядке меню в навигации, а не по дате поля ACF.

Я хотел бы, чтобы ссылки на предыдущую и следующую запись основывались на поле даты ACF, чтобы, когда пользователь нажимает на любую из них, он переходил к фактической следующей записи по дате.

Мне просто нужна функция, чтобы изменить поведение виджета в Elementor, так как это настройки по умолчанию WordPress.

Я прочитал документацию WordPress, но она не оказалась очень полезной.

Моя тема является дочерней темой Hello Elementor.

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

Для изменения поведения навигации по записям (previous and next post links) в Elementor с использованием кастомного поля даты начала (ACF start date) для типа записи "события", вам потребуется внести некоторые изменения в код вашей темы. Вы уже упомянули, что используете дочернюю тему Hello Elementor, что является правильным подходом для применения кастомизаций.

Шаги для реализации:

  1. Создайте функцию для получения следующего и предыдущего события по дате.

    Для этого вам нужно будет использовать хук 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];
    }
  2. Используйте эту функцию в шаблоне единственной записи.

    После создания функции, вам нужно получить и вывести ссылки на предыдущие и следующие записи в вашем шаблоне единственной записи события. Это можно сделать в файле 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>';
    }
  3. Добавьте кастомный код в файл вашей дочерней темы.

    Вставьте вышеуказанный код в файл functions.php вашей дочерней темы. Это обеспечит правильное извлечение и отображение навигации на основе даты начала событий.

Проверка и тестирование

После внесения изменений обязательно протестируйте функциональность навигации. Убедитесь, что ссылки корректно ведут на предыдущие и следующие события на основе даты начала, как это задумано.

Заключение

Таким образом, вы сможете настроить элемент навигации Elementor для работы в соответствии с вашими требованиями, базируясь на кастомном поле ACF. Этот подход не только позволяет изменить поведение стандартных функций WordPress, но и делает ваш сайт более удобным для пользователей, что влияет на их общую удовлетворенность и SEO-позиции сайта.

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

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