Функция get_adjacent_post_link()
в WordPress позволяет получать ссылки на соседние записи — как предыдущие, так и следующие. Это особенно полезно для навигации между записями в блогах, каталогах или любых других типах контента, где логически связаны несколько постов.
get_adjacent_post_link( string $format, string $link, bool $in_same_term = false, int[]|string $excluded_terms = '', bool $previous = true, string $taxonomy = 'category' ): string
Параметры
- $format (string, обязательный) — Формат ссылки, где
%link
будет заменён на HTML-код ссылки<a>
. - $link (string, обязательный) — Анкор ссылки, где
%title
будет заменён на заголовок поста. - $in_same_term (bool, необязательный) — Указывает, нужно ли искать соседние записи в той же таксономии. По умолчанию:
false
. - $excluded_terms (int[]|string, необязательный) — Массив или строка с ID терминов, которые необходимо исключить из поиска. По умолчанию:
''
. - $previous (bool, необязательный) — Указывает, нужно ли искать предыдущую запись (
true
) или следующую (false
). По умолчанию:true
. - $taxonomy (string, необязательный) — Название таксономии, с которой будет работать функция, если включен параметр
$in_same_term
. По умолчанию:'category'
.
Возвращаемое значение
Функция возвращает строку с HTML-кодом ссылки на предыдущую или следующую запись.
Пример 1: Ссылка на предыдущую запись
В этом примере мы получаем ссылку на предыдущую запись.
// Ссылка на предыдущую запись
echo get_adjacent_post_link( '← %link', '%title' );
// Пример вывода: ← <a href="http://example.com/previous-post" rel="prev">Заголовок предыдущего поста</a>
Пример 2: Ссылка на следующую запись
Теперь создадим ссылку на следующую запись.
// Ссылка на следующую запись
echo get_adjacent_post_link( '%link →', '%title', false );
// Пример вывода: <a href="http://example.com/next-post" rel="next">Заголовок следующего поста</a> →
Пример 3: Ссылка на предыдущую запись из текущей рубрики
С помощью параметра $in_same_term
мы можем ограничить поиск записями из одной рубрики.
// Ссылка на предыдущую запись в текущей рубрике
echo get_adjacent_post_link( '%link', '← %title', true );
// Пример вывода: <a href="http://example.com/previous-post" rel="prev">← Заголовок предыдущего поста</a>
Пример 4: Ссылка на следующую запись из текущей рубрики
Аналогично, получим ссылку на следующую запись из текущей рубрики.
// Ссылка на следующую запись в текущей рубрике
echo get_adjacent_post_link( '%link', '%title →', true, '', false );
// Пример вывода: <a href="http://example.com/next-post" rel="next">Заголовок следующего поста →</a>
Пример 5: Исключение категорий при поиске
В этом примере мы исключаем записи из определённых категорий.
// Ссылка на предыдущую запись, исключая записи из категорий с ID 3 и 7
echo get_adjacent_post_link( '%link', '%title →', false, '3,7' );
// Пример вывода: <a href="http://example.com/another-post" rel="prev">Заголовок записи →</a>
Пример 6: Использование с кастомной таксономией
Функция может работать и с пользовательскими таксономиями.
// Ссылка на предыдущую запись в кастомной таксономии 'genre'
echo get_adjacent_post_link( '%link', '%title →', true, '', true, 'genre' );
// Пример вывода: <a href="http://example.com/previous-genre-post" rel="prev">Заголовок записи →</a>
Дополнительная функция: Кольцевая перелинковка
Иногда бывает полезно иметь функцию, которая автоматически создаёт ссылки на первую или последнюю запись, если следующей или предыдущей записи нет. Вот пример такой функции:
/**
* Выводит ссылку на смежные записи (следующая/предыдущая).
*
* Если смежной записи нет, выводит ссылку на первую или последнюю запись соответственно.
*
* @param string $course принимает значение 'next' или 'prev'.
*/
function custom_adjacent_post_link( $course = 'next' ) {
global $post;
$is_previous = ($course === 'prev');
// Получаем ссылку на смежную запись
$link = get_adjacent_post_link( '%link', '%title', true, '', $is_previous );
// Если записи нет, ищем первую или последнюю запись в текущей рубрике
if ( empty( $link ) ) {
$term = get_the_terms( $post->ID, 'category' )[0];
$order = $is_previous ? 'DESC' : 'ASC';
$args = [
'numberposts' => 1,
'exclude' => $post->ID,
'category' => $term->term_id,
'order' => $order,
];
$post = get_posts( $args );
if ( ! empty( $post ) ) {
$link = sprintf( '<a href="%s" rel="%s">%s</a>', get_permalink( $post[0]->ID ), $course, $post[0]->post_title );
}
}
echo $link;
}
Пример использования кольцевой перелинковки
// Ссылка на следующую запись с кольцевой перелинковкой
custom_adjacent_post_link( 'next' );
// Ссылка на предыдущую запись с кольцевой перелинковкой
custom_adjacent_post_link( 'prev' );
Заключение
Функция get_adjacent_post_link()
предоставляет разработчикам WordPress гибкие возможности для создания навигации между записями. С её помощью можно легко генерировать ссылки на предыдущие и следующие посты, а также учитывать различные условия, такие как таксономия и исключение определённых категорий. Использование дополнительных функций, таких как кольцевая перелинковка, может значительно улучшить пользовательский опыт на сайте.