Как ограничить ссылки “Предыдущая” и “Следующая” на посты одной категории?

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

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

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

Аналогично, в полном обычном потоке, как только пост открыт, я хотел бы, чтобы навигация исключала эту категорию.

Выберите любую из следующих функций:

  1. get_next_post_link();
  2. next_post_link();
  3. get_previous_post_link();
  4. previous_post_link();

Параметры следующие (в соответствующем порядке):

  1. @param string $format Необязательный. Формат анкора ссылки. По умолчанию ‘« %link’.
  2. @param string $link Необязательный. Формат постоянной ссылки. По умолчанию ‘%title’.
  3. @param bool $in_same_term Необязательный. Должна ли ссылка быть в том же таксономическом терме. По умолчанию false.
  4. @param array|string $excluded_terms Необязательный. Массив или список ID исключенных терминов, разделённых запятыми. По умолчанию empty.
  5. @param string $taxonomy Необязательный. Таксономия, если $in_same_term равно true. По умолчанию ‘category’.

@return string URL ссылки на следующий пост в отношении текущего поста.

Дополнительно, вы можете сделать больше с вашей пагинацией, если выберете больше работы. Вы можете использовать get_next_post(); или get_previous_post(); Эти две функции позволят вам получить весь объект следующего/предыдущего поста. Затем вы сможете получить метаданные поста, изображение, формат поста, отрывок поста и т. д.

Параметры следующие (в соответствующем порядке):

  1. @param bool $in_same_term Необязательный. Должен ли пост находиться в том же таксономическом терме. По умолчанию false.
  2. @param array|string $excluded_terms Необязательный. Массив или список ID исключенных терминов, разделённых запятой. По умолчанию empty.
  3. @param string $taxonomy Необязательный. Таксономия, если $in_same_term равно true. По умолчанию ‘category’.

@return null|string|WP_Post Объект поста, если успешно. Null, если global $post не установлен. Пустая строка, если соответствующий пост не существует.

Все это (и больше) можно найти в ./wp-includes/link-template.php

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

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

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

1. Использовать функции get_next_post_link() и get_previous_post_link()

Эти функции позволяют создавать ссылки на следующий и предыдущий пост с возможностью фильтрации по категориям. Ниже приведен пример кода, который можно вставить в файл вашей темы (обычно это single.php или content-single.php):

<?php
// Получаем текущий пост
$current_post = get_post();

// Получаем идентификаторы категорий текущего поста
$current_categories = wp_get_post_categories($current_post->ID);

// Убедимся, что текущий пост имеет хотя бы одну категорию
if (!empty($current_categories)) {
    // Формируем ссылки на следующий и предыдущий посты в той же категории
    echo '<div class="post-navigation">';

    // Ссылка на предыдущий пост в той же категории
    previous_post_link('%link', '« %title', true, '', 'category');

    // Ссылка на следующий пост в той же категории
    next_post_link('%link', '%title »', true, '', 'category');

    echo '</div>';
}
?>

2. Исключение определенной категории при переходах с главного фида

Если вы также хотите исключить определенную категорию из навигации, когда пользователь открывает пост из полной ленты, вы можете добавить дополнительную проверку:

<?php
// Получаем боковую информацию о текущем посте и его категориях
$current_post = get_post();
$current_categories = wp_get_post_categories($current_post->ID);

// Условная проверка для исключения определенной категории
$excluded_category_id = 123; // Замените 123 на ID категории, которую вы хотите исключить

if (!in_array($excluded_category_id, $current_categories)) {
    // Если категория не исключена, выводим навигацию
    echo '<div class="post-navigation">';
    previous_post_link('%link', '« %title', false, $excluded_category_id, 'category');
    next_post_link('%link', '%title »', false, $excluded_category_id, 'category');
    echo '</div>';
}
?>

3. Объяснение параметров

  • $in_same_term — устанавливая этот параметр в true, вы указываете, что посты должны находиться в одной и той же таксономной терминологии (в данном случае в одной категории).
  • $excluded_terms — этот параметр может быть использован для исключения постов определенной категории из навигации.

Заключение

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

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

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

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