Вопрос или проблема
Можно ли в 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()
позволяет извлекать следующий пост в зависимости от заданных условий, таких как категория или таксономия. Если у вас есть посты, которые могут относиться к нескольким категориям одновременно, это добавляет некоторую сложность, но решение доступно.
Пример кода
Ваша исходная идея уже близка к правильному решению. Давайте более детально рассмотрим ваш код и добавим необходимые изменения.
-
Определение переменной: Начнем с того, что мы определяем категорию, из которой мы хотим получить следующий пост.
$the_cat = "latest";
-
Получение всех категорий текущего поста: Сначала мы извлечем все категории текущего поста, используя функцию
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 = '';
-
Исключение нежелательных категорий: Мы будем итерироваться по всем категориям и исключать те, которые не совпадают с заданной.
foreach ($terms as $term) { if ($term->slug !== $the_cat) { $terms_to_exclude .= $term->term_id . ','; } }
-
Использование функции 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');
Заключение
Используя данный код, вы сможете корректно получать следующий пост из определенной категории. Не забывайте о тестировании, чтобы убедиться, что все работает так, как вы планировали.
Этот подход улучшит навигацию на вашем сайте и сделает его более удобным для пользователей, которые ищут материалы в определенных категориях.