Функция 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. Она позволяет легко получать соседние посты (следующие или предыдущие) с учётом различных условий, таких как таксономия, исключение категорий и работа с пользовательскими таксономиями.