Функция get_adjacent_post()
в WordPress используется для получения соседней записи (предыдущей или следующей) относительно текущего поста. Эта функция полезна, когда требуется динамически создавать навигацию между записями на сайте, например, в блогах или новостных разделах.
get_adjacent_post( bool $in_same_term = false, int[]|string $excluded_terms = '', bool $previous = true, string $taxonomy = 'category' ): WP_Post|null|string
Параметры
- $in_same_term (bool, необязательный) — Указывает, нужно ли искать посты в той же таксономии (например, в той же категории). По умолчанию:
false
. - $excluded_terms (int[]|string, необязательный) — Массив или строка, содержащая ID терминов (категорий, меток), которые нужно исключить из поиска. По умолчанию:
''
. - $previous (bool, необязательный) — Если
true
, функция возвращает предыдущий пост, еслиfalse
— следующий пост. По умолчанию:true
. - $taxonomy (string, необязательный) — Таксономия для фильтрации записей, если параметр
$in_same_term
равенtrue
. По умолчанию:'category'
.
Возвращаемое значение
Функция возвращает объект WP_Post
при успешном выполнении, null
— если глобальная переменная $post
не установлена, и пустую строку, если подходящий пост не найден.
Пример 1: Ссылка на следующий пост
Этот пример показывает, как получить и вывести ссылку на следующий пост.
// Получаем следующий пост
$next_post = get_adjacent_post( false, '', false );
// Проверяем, существует ли следующий пост
if ( $next_post ) {
echo '<a href="' . get_permalink( $next_post->ID ) . '">' . esc_html( $next_post->post_title ) . '</a>';
}
В этом примере параметр $previous
установлен в false
, что указывает на получение следующего поста. Если пост существует, выводится его ссылка.
Пример 2: Ссылка на предыдущий пост
Этот пример демонстрирует, как вывести ссылку на предыдущий пост.
// Получаем предыдущий пост
$prev_post = get_adjacent_post();
// Проверяем, существует ли предыдущий пост
if ( $prev_post ) {
echo '<a href="' . get_permalink( $prev_post->ID ) . '">' . esc_html( $prev_post->post_title ) . '</a>';
}
По умолчанию параметр $previous
равен true
, поэтому эта функция возвращает предыдущий пост.
Пример 3: Получение постов из одной категории
Если вам нужно получить следующий или предыдущий пост только из той же категории, можно использовать параметр $in_same_term
.
// Получаем следующий пост в той же категории
$next_in_category = get_adjacent_post( true, '', false );
// Проверяем, существует ли следующий пост в категории
if ( $next_in_category ) {
echo '<a href="' . get_permalink( $next_in_category->ID ) . '">' . esc_html( $next_in_category->post_title ) . '</a>';
}
Здесь параметр $in_same_term
установлен в true
, что указывает на то, что следующий пост должен быть из той же категории, что и текущий.
Пример 4: Исключение категорий при поиске
Можно исключить посты из определённых категорий при получении следующего или предыдущего поста с помощью параметра $excluded_terms
.
// Исключаем посты из категории с ID 5
$prev_post = get_adjacent_post( false, '5', true );
// Проверяем, существует ли предыдущий пост, не принадлежащий к категории 5
if ( $prev_post ) {
echo '<a href="' . get_permalink( $prev_post->ID ) . '">' . esc_html( $prev_post->post_title ) . '</a>';
}
Этот код исключает посты, принадлежащие к категории с ID 5
.
Пример 5: Использование кастомной таксономии
Функция get_adjacent_post()
поддерживает работу с пользовательскими таксономиями. Например, можно получить следующий пост в рамках кастомной таксономии genre
.
// Получаем следующий пост в рамках пользовательской таксономии 'genre'
$next_post = get_adjacent_post( true, '', false, 'genre' );
// Проверяем, существует ли следующий пост в этой таксономии
if ( $next_post ) {
echo '<a href="' . get_permalink( $next_post->ID ) . '">' . esc_html( $next_post->post_title ) . '</a>';
}
Хуки, связанные с get_adjacent_post()
get_(adjacent)_post_excluded_terms
— Позволяет модифицировать исключённые термины.get_next_post_excluded_terms
— Позволяет изменить исключённые термины при поиске следующего поста.get_previous_post_excluded_terms
— Позволяет изменить исключённые термины при поиске предыдущего поста.get_(adjacent)_post_join
— Позволяет изменить SQL-запрос при поиске соседнего поста.get_(adjacent)_post_where
— Позволяет изменить условия SQL-запроса при поиске соседнего поста.get_(adjacent)_post_sort
— Позволяет изменить сортировку SQL-запроса.
Заключение
Функция get_adjacent_post()
является мощным инструментом для навигации по записям в WordPress. Она позволяет легко получать соседние посты (следующие или предыдущие) с учётом различных условий, таких как таксономия, исключение категорий и работа с пользовательскими таксономиями.