get_adjacent_post_link()
Получает ссылку (HTML тег A) следующий/предыдущий пост из указанной таксономии (по умолчанию category).
Работает со всеми типами записей (с типом записи текущего поста - global $post).
Используется на страницах типа is_single().
Для этой функции существуют обертки, для удобного использования:
Работает на основе: get_adjacent_post()
Основа для: get_next_post_link(), get_previous_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://example.com/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://example.com/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; }
Список изменений
С версии 3.7.0 | Введена. |