get_adjacent_post_link()
Получает ссылку (HTML тег A) на смежные записи (следующая/предыдущая). Можно указать ограничения по рубрикам или элементам таксономий.
Работает со всеми типами записей (с типом записи текущего поста — global $post
).
Используется на страницах типа is_single().
get_next_post_link()
, get_previous_post_link()
get_adjacent_post()
Хуки из функции
the_title
(adjacent)_post_link
Возвращает
Строку: HTML код ссылки:
<a rel="nofollow" href="/post_name">Заголовок поста</a>
Использование
get_adjacent_post_link( $format, $link, $in_same_term, $excluded_terms, $previous, $taxonomy );
$format(строка) (обязательный)
Формат ссылки. %link будет заменено на HTML код ссылки <a>. Например, ‘%link →’ выведет <a …> →.
$link(строка) (обязательный)
Анкор ссылки. ‘%title’ будет заменено на заголовок записи.
$in_same_term(логический)
true — будет искать смежные записи в том же элементе таксономии (рубрике) что и текущая статья, откуда вызывается функция. false — будет искать ссылки из всех элементов таксономии.
По умолчанию: false
$excluded_terms(массив/строка)
ID элементов таксономии, статьи в которых не нужно учитывать. Указывается в массиве или в строке через запятую, например: ‘1,5,15’ или array(1,5,15).
По умолчанию: »
$previous(логический/строка)
Какую записи искать: следующую за текущей статьей (false) или до текущей статьи (true).
По умолчанию: true
$taxonomy(строка)
Название таксономии с которой работать, если есть параметр $in_same_term.
По умолчанию: ‘category’
Примеры
#1 Демонстрация
Ниже варианты вызова функции и то что в результате выводится:
# ссылка на предыдущую запись
echo get_adjacent_post_link( '← %link', '%title' );
# выведет: ← <a href="http://test.ru/markup" rel="prev">Маркировка</a>
# ссылка на следующую запись
echo get_adjacent_post_link( '%link →', '%title', 0, '', false );
# выведет: <a href="http://wptest.ru/some" rel="next">Что-то</a> →
# ссылка на предыдущую запись из текущей рубрики
echo get_adjacent_post_link( '%link', '← %title', 1 );
# выведет: <a href="http://test.ru/markup" rel="prev">← Маркировка</a>
# ссылка на следующую запись из текущей рубрики
echo get_adjacent_post_link( '%link', '%title →', 1, '', false );
# выведет: <a href="http://wptest.ru/some" rel="next">Что-то →</a>
# ссылка на предыдущую запись из текущего элемента таксономии (my_tax), для произвольных таксономий
echo get_adjacent_post_link( '%link', '%title →', 1, '', 1, 'my_tax' );
# ссылка на следующую запись из текущего элемента таксономии (my_tax)
echo get_adjacent_post_link( '%link', '%title →', 1, '', 0, 'my_tax' );
# ссылка на предыдущую запись не учитывая записи из рубрик 5 и 10
echo get_adjacent_post_link( '%link', '%title →', 0, '5,10' );
#2 Функция кольцевой перелинковки
Функция из комментариев от Campusboy, которая может пригодится.
Особенность функции в том что, если след. или пред. записи нет, то будет выведена ссылка на первую или последнюю запись соответственно.
/**
* Выводит ссылку (HTML тег A) на смежные записи (следующая/предыдущая).
*
* При отсутствии смежной записи выводит запись с противоположного конца рубрики. Работает в пределах той рубрики, где находится сама запись.
*
* @param string $course принимает значение next/prev.
*/
function da_the_adjacent_post_link( $course = '' ){
global $post;
$course = ( $course == 'prev' ) ? true : false;
$order = ( $course ) ? 'DESC' : 'ASC';
$class = ( $course ) ? 'prev' : 'next';
$link = get_adjacent_post_link( '%link', '%title', true, '', $course );
if ( ! $link ){
$term = get_the_terms( $post->ID, 'category' );
$term = $term[0];
$article = get_posts([
'numberposts' => 1,
'exclude' => $post->ID,
'category' => $term->term_id,
'order' => $order
]);
if ( empty($article) )
return false;
else
$article = $article[0];
$link = sprintf( '<a href="%s" rel="%s">%s</a>', get_the_permalink($article->ID), $class, $article->post_title );
}
echo $link;
}
Код get adjacent post link: wp-includes/link-template.php
WP 5.3
function get_adjacent_post_link( $format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category' ) {
if ( $previous && is_attachment() ) {
$post = get_post( get_post()->post_parent );
} else {
$post = get_adjacent_post( $in_same_term, $excluded_terms, $previous, $taxonomy );
}
if ( ! $post ) {
$output = '';
} else {
$title = $post->post_title;
if ( empty( $post->post_title ) ) {
$title = $previous ? __( 'Previous Post' ) : __( 'Next Post' );
}
/** This filter is documented in wp-includes/post-template.php */
$title = apply_filters( 'the_title', $title, $post->ID );
$date = mysql2date( get_option( 'date_format' ), $post->post_date );
$rel = $previous ? 'prev' : 'next';
$string = '<a href="' . get_permalink( $post ) . '" rel="' . $rel . '">';
$inlink = str_replace( '%title', $title, $link );
$inlink = str_replace( '%date', $date, $inlink );
$inlink = $string . $inlink . '</a>';
$output = str_replace( '%link', $inlink, $format );
}
$adjacent = $previous ? 'previous' : 'next';
/**
* Filters the adjacent post link.
*
* The dynamic portion of the hook name, `$adjacent`, refers to the type
* of adjacency, 'next' or 'previous'.
*
* @since 2.6.0
* @since 4.2.0 Added the `$adjacent` parameter.
*
* @param string $output The adjacent post link.
* @param string $format Link anchor format.
* @param string $link Link permalink format.
* @param WP_Post $post The adjacent post.
* @param string $adjacent Whether the post is previous or next.
*/
return apply_filters( "{$adjacent}_post_link", $output, $format, $link, $post, $adjacent );
}
Источник: https://wp-kama.ru/function/get_adjacent_post_link