WordPress как на ладони

get_the_post_navigation()WP 4.1.0

Получает ссылки (HTML) на следующую и предыдущую записи. Используется на странице отдельной записи: is_singular().

Хорошо подойдет для навигации между вложениями (прикрепленными картинками).

До версии 4.1. для вывода ссылок на предыдущий и следующий поста, нужно было использовать функции next_post_link() и previous_post_link(). Эта функцию - обертка для этих функций.

Чтобы сразу вывести результат на экран, используйте the_post_navigation()

Основа для: the_post_navigation()

Хуков нет.

Возвращает

Строку.

Использование

get_the_post_navigation( $args );
$args(массив)

Массив который может содержать следующие параметры:

  • prev_text(строка)
    Текст который будет показан, как анкор ссылки на предыдущую запись.
    По умолчанию: '%title'

  • next_text(строка)
    Текст который будет показан, как анкор ссылки на следующую запись.
    По умолчанию: '%title'

  • screen_reader_text(строка)
    Текст (заголовок) блока навигации для.
    По умолчанию: __( 'Post navigation' )

  • in_same_term(логический) (WP 4.4)
    true, когда нужно, чтобы ссылка была из текущего элемента указанной в taxonomy таксономии.
    По умолчанию: false

  • excluded_terms(строка/массив) (WP 4.4)
    ID элементов таксономии, который нужно исключить. В виде массива или в строке через запятую.
    По умолчанию: ''

  • taxonomy(строка) (WP 4.4)
    Название таксономии, когда $in_same_term = true.
    По умолчанию: 'category'

  • aria_label(строка) (WP 5.5)
    Значение атрибута area-label="" для <nav> элемента.
    По умолчанию: __( 'Posts' )

  • class(строка) (WP 5.5)
    Значение атрибута class="" для <nav> элемента.
    По умолчанию: 'post-navigation'

Примеры

0

#1 Ссылки навигации между постами

Выведем ссылки на следующий и предыдущий записи (посты) на отдельной странице типа is_single().

<?php
// След./Пред. Пост.
$post_nav = get_the_post_navigation( array(
	'next_text' => '<span class="meta-nav" aria-hidden="true">Далее</span> ' .
		'<span class="screen-reader-text">Следующая запись</span> ' .
		'<span class="post-title">%title</span>',
	'prev_text' => '<span class="meta-nav" aria-hidden="true">Назад</span> ' .
		'<span class="screen-reader-text">Предыдущая запись</span> ' .
		'<span class="post-title">%title</span>',
) );

echo $post_nav;
?>

В результате мы получим такой HTML код:

<nav class="navigation post-navigation" role="navigation">
	<h2 class="screen-reader-text">Навигация по записям</h2>
	<div class="nav-links">
		<div class="nav-previous"><a href="//example.com/post8/" rel="prev"><span class="meta-nav" aria-hidden="true">Назад</span> <span class="screen-reader-text">Предыдущая запись:</span> <span class="post-title">Запись со случайным номером 81717</span></a>
		</div>
		<div class="nav-next"><a href="//example.com/post10/" rel="next"><span class="meta-nav" aria-hidden="true">Далее</span> <span class="screen-reader-text">Следующая запись:</span> <span class="post-title">Привет, мир!</span></a>
		</div>
	</div>
</nav>

Или так это выглядит в дефолной теме twentyfifteen:

prev-next

0

#2 Добавим title атрибут для ссылок

Этот пример показывает как добавить атрибут <a title="" ...> к каждой ссылке в блоке. В значении будет лежать заголовок поста и перед ним будет слово Смотрите:: title="Смотрите: ЗАГОЛОВО_ЗАПИСИ".

add_filter( 'next_post_link', 'add_title_adjacent_post_link', 10, 4 );
add_filter( 'previous_post_link', 'add_title_adjacent_post_link', 10, 4 );
function add_title_adjacent_post_link( $output, $format, $link, $post ){

	$title = esc_attr( 'Смотрите: '. $post->post_title );

	return str_replace( '<a', "<a title='$title'", $output );
}

Код нужно добавить непосредственно перед вызовом get_the_post_navigation().

Список изменений

С версии 4.1.0 Введена.
С версии 4.4.0 Introduced the in_same_term, excluded_terms, and taxonomy arguments.
С версии 5.3.0 Added the aria_label parameter.
С версии 5.5.0 Added the class parameter.

Код get_the_post_navigation() WP 6.4.3

function get_the_post_navigation( $args = array() ) {
	// Make sure the nav element has an aria-label attribute: fallback to the screen reader text.
	if ( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
		$args['aria_label'] = $args['screen_reader_text'];
	}

	$args = wp_parse_args(
		$args,
		array(
			'prev_text'          => '%title',
			'next_text'          => '%title',
			'in_same_term'       => false,
			'excluded_terms'     => '',
			'taxonomy'           => 'category',
			'screen_reader_text' => __( 'Post navigation' ),
			'aria_label'         => __( 'Posts' ),
			'class'              => 'post-navigation',
		)
	);

	$navigation = '';

	$previous = get_previous_post_link(
		'<div class="nav-previous">%link</div>',
		$args['prev_text'],
		$args['in_same_term'],
		$args['excluded_terms'],
		$args['taxonomy']
	);

	$next = get_next_post_link(
		'<div class="nav-next">%link</div>',
		$args['next_text'],
		$args['in_same_term'],
		$args['excluded_terms'],
		$args['taxonomy']
	);

	// Only add markup if there's somewhere to navigate to.
	if ( $previous || $next ) {
		$navigation = _navigation_markup( $previous . $next, $args['class'], $args['screen_reader_text'], $args['aria_label'] );
	}

	return $navigation;
}
10 комментариев
    Войти