Навигация по записям на основе пользовательского поля ACF

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

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

Возможно, шорткод – это правильный путь, но я не совсем уверен, как это сделать.

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

Пост-навигация по пользовательскому полю ACF

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

Решение задачи

Для решения этой проблемы мы можем воспользоваться хуком pre_get_posts для изменения параметров запроса и функции get_field() для извлечения значения поля ACF. Кроме того, создадим специальную функцию для изменения поведения пост-навигации.

Шаг 1: Создание функции для выбора правильной даты

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

function modify_event_query($query) {
    if (is_post_type_archive('events') && $query->is_main_query()) {
        $query->set('meta_key', 'event_date'); // Предположим, что ваше поле ACF называется 'event_date'
        $query->set('orderby', 'meta_value');
        $query->set('order', 'ASC'); // Или 'DESC' в зависимости от ваших требований
    }
}
add_action('pre_get_posts', 'modify_event_query');

Этот код изменяет основной запрос на архивной странице вашего CPT ‘events’ и устанавливает его на сортировку по значениям мета-поля ‘event_date’, которое вы задали в ACF.

Шаг 2: Обновление пост-навигации

Теперь, когда вы согласовали сортировку постов, следующая задача заключается в корректной настройке навигации между постами. Для этого вы можете использовать функцию get_adjacent_post():

function get_adjacent_event($in_same_term = false, $adjacent = 'next') {
    global $post;

    // Получение значения настройки "в одном и том же термине", если нужно
    $event_date = get_field('event_date', $post->ID);

    $args = array(
        'post_type'    => 'events',
        'meta_key'     => 'event_date',
        'orderby'      => 'meta_value',
        'order'        => ($adjacent == 'next') ? 'ASC' : 'DESC',
        'meta_query'   => array(
            array(
                'key'     => 'event_date',
                'value'   => $event_date,
                'compare' => ($adjacent == 'next') ? '>' : '<',
                'type'    => 'DATE'
            )
        )
    );

    $adjacent_post = new WP_Query($args);

    if ($adjacent_post->have_posts()) {
        $adjacent_post->the_post();
        return get_permalink();
    }
    return false;
}

Шаг 3: Использование функции навигации в шаблоне

Следующим шагом будет использование этой новой функции в вашем шаблоне для отображения ссылок на предыдущие и следующие посты:

<a href="<?php echo get_adjacent_event(false, 'prev'); ?>">Предыдущее событие</a>
<a href="<?php echo get_adjacent_event(false, 'next'); ?>">Следующее событие</a>

Зачем использовать данное решение?

  • Гибкость: Вы можете изменять порядок событий в зависимости от даты, определенной в пользовательском поле ACF, а не от даты публикации постов.
  • Контроль над показом контента: Это позволяет вам лучше контролировать пользовательский опыт, направляя пользователей к следующему или предыдущему событию согласно фактической дате события.
  • Простота интеграции с Elementor: Используя данный код, вы можете легко интегрировать навигацию в любой элемент, созданный с помощью Elementor, или в своем собственном шаблоне.

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

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

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