получить_следующий_пост установить категорию

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

Можно ли в WordPress установить категорию, используемую в get_next_post?

У меня есть пост, который может иметь более одной категории.

На странице single.php, отображающей пост, я хочу показать следующие и предыдущие посты.

У меня есть категория, из которой я хочу выбрать на single.php, так как мне это использовать в get_next_post

    $the_cat="latest";

    $next_post = get_next_post($in_same_term = true, $excluded_terms="", $taxonomy = $the_cat); 

Попробуйте это:

$the_cat="latest";
$term_args = array('orderby' => 'term_id', 'order' => 'ASC', 'fields' => array('term_id', 'slug'));
$terms = wp_get_post_terms( $post->ID, 'category', $term_args );
foreach($terms as $term){
    if($term->slug !== $the_cat){
        $terms_to_exclude .= $term->term_id.',';
    }
}
$next_post = get_next_post($in_same_term = true, $excluded_terms = $terms_to_exclude, $taxonomy = 'category');

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

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

Технический контекст

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

Пример кода

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

  1. Определение переменной: Начнем с того, что мы определяем категорию, из которой мы хотим получить следующий пост.

    $the_cat = "latest";
  2. Получение всех категорий текущего поста: Сначала мы извлечем все категории текущего поста, используя функцию wp_get_post_terms(). Мы также будем отслеживать идентификаторы категорий, которые не совпадают с желаемой.

    $term_args = array('orderby' => 'term_id', 'order' => 'ASC', 'fields' => array('term_id', 'slug'));
    $terms = wp_get_post_terms($post->ID, 'category', $term_args);
    $terms_to_exclude = '';
  3. Исключение нежелательных категорий: Мы будем итерироваться по всем категориям и исключать те, которые не совпадают с заданной.

    foreach ($terms as $term) {
        if ($term->slug !== $the_cat) {
            $terms_to_exclude .= $term->term_id . ',';
        }
    }
  4. Использование функции get_next_post(): Теперь мы можем вызвать get_next_post(), передавая необходимые параметры.

    if (!empty($terms_to_exclude)) {
        $terms_to_exclude = rtrim($terms_to_exclude, ','); // Удаляем запятую в конце
    }
    $next_post = get_next_post(true, $terms_to_exclude, 'category');

В итоге, ваш окончательный код будет выглядеть так:

$the_cat = "latest";
$term_args = array('orderby' => 'term_id', 'order' => 'ASC', 'fields' => array('term_id', 'slug'));
$terms = wp_get_post_terms($post->ID, 'category', $term_args);
$terms_to_exclude = '';

foreach ($terms as $term) {
    if ($term->slug !== $the_cat) {
        $terms_to_exclude .= $term->term_id . ',';
    }
}

if (!empty($terms_to_exclude)) {
    $terms_to_exclude = rtrim($terms_to_exclude, ',');
}

$next_post = get_next_post(true, $terms_to_exclude, 'category');

Заключение

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

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

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

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