Вопрос или проблема
Я использую тему под названием Avada, довольно известную тему. По умолчанию в WordPress, если у вас более одной категории для постов и включена навигация “предыдущий/следующий” для постов, WordPress будет проходить через все посты и не будет держать их в одной таксономии. Я нашел код для другой темы, чтобы сделать так, чтобы навигация “предыдущий/следующий” оставалась в одной таксономии, но у меня возникли проблемы с тем, чтобы это заработало. У кого-нибудь есть код для functions.php или single.php, который бы это обеспечивал для WordPress в общем? Раньше был плагин для этого, но он уже устарел. Спасибо.
Ответ или решение
Чтобы реализовать навигацию «Предыдущий/Следующий» для постов в одной и той же таксономии в WordPress, вам потребуется внести некоторые изменения в файл functions.php
вашей темы или файл single.php
, если вы хотите, чтобы это поведение применялось только к отдельным записям. Давайте рассмотрим этот процесс подробно.
Подход
По умолчанию WordPress использует глобальные параметры для извлечения предыдущих и следующих записей, что приводит к тому, что навигация охватывает все посты, а не только те, которые принадлежат к одной и той же категории или таксономии. Чтобы изменить это поведение, необходимо использовать пользовательские запросы, передавая дополнительные параметры.
Пример кода
-
Откройте файл
functions.php
в вашей теме Avada. -
Добавьте следующий код:
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
];
}
- Теперь, в файле
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
для изображений при работе с постами. Счастливого кодирования!