Как сохранить навигацию “предыдущий/следующий” в записях одной таксономии

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

Я использую тему под названием Avada, довольно известную тему. По умолчанию в WordPress, если у вас более одной категории для постов и включена навигация “предыдущий/следующий” для постов, WordPress будет проходить через все посты и не будет держать их в одной таксономии. Я нашел код для другой темы, чтобы сделать так, чтобы навигация “предыдущий/следующий” оставалась в одной таксономии, но у меня возникли проблемы с тем, чтобы это заработало. У кого-нибудь есть код для functions.php или single.php, который бы это обеспечивал для WordPress в общем? Раньше был плагин для этого, но он уже устарел. Спасибо.

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

Чтобы реализовать навигацию «Предыдущий/Следующий» для постов в одной и той же таксономии в WordPress, вам потребуется внести некоторые изменения в файл functions.php вашей темы или файл single.php, если вы хотите, чтобы это поведение применялось только к отдельным записям. Давайте рассмотрим этот процесс подробно.

Подход

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

Пример кода

  1. Откройте файл functions.php в вашей теме Avada.

  2. Добавьте следующий код:

function get_adjacent_post_in_same_taxonomy($in_same_term = true) {
    global $post;

    // Получаем все термины текущего поста для заданной таксономии
    $terms = get_the_terms($post->ID, 'category');
    if (!$terms) return;

    // Извлекаем идентификаторы терминов
    $term_ids = wp_list_pluck($terms, 'term_id');

    // Находим предыдущий пост
    $prev_post = get_adjacent_post($in_same_term, '', true, 'category');
    // Находим следующий пост
    $next_post = get_adjacent_post($in_same_term, '', false, 'category');

    return [
        'prev' => $prev_post,
        'next' => $next_post
    ];
}
  1. Теперь, в файле single.php или другом шаблоне поста, вы можете использовать следующий код для отображения навигации:
$adjacent_posts = get_adjacent_post_in_same_taxonomy();

if ($adjacent_posts['prev'] || $adjacent_posts['next']) {
    echo '<div class="post-navigation">';

    if ($adjacent_posts['prev']) {
        echo '<a href="' . get_permalink($adjacent_posts['prev']->ID) . '">Предыдущий: ' . get_the_title($adjacent_posts['prev']->ID) . '</a>';
    }

    if ($adjacent_posts['next']) {
        echo '<a href="' . get_permalink($adjacent_posts['next']->ID) . '">Следующий: ' . get_the_title($adjacent_posts['next']->ID) . '</a>';
    }

    echo '</div>';
}

Объяснение кода

  • Функция get_adjacent_post_in_same_taxonomy – отвечает за получение соседних постов в одной и той же таксономии. Она получает термины текущего поста и извлекает их идентификаторы.
  • get_adjacent_post(...) – используется для получения предыдущего и следующего поста, с использованием параметра true для «предыдущего» и false для «следующего», что указывает на то, что нам нужна навигация в пределах одной категории.
  • В шаблоне вы можете выводить ссылки на соседние посты, проверяя, существуют ли они.

Заключение

Таким образом, вы сможете настроить навигацию «Предыдущий/Следующий» для постов в одной и той же таксономии. Убедитесь, что тестируете этот код в безопасной среде или создавайте резервную копию вашего сайта перед внесением изменений. Этот метод является универсальным и может быть адаптирован для различных таксономий, просто изменив 'category' на нужное значение.

Чтобы ваш сайт был более оптимизированным для SEO, не забудьте также включить метаданные и атрибуты alt для изображений при работе с постами. Счастливого кодирования!

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

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