wp_link_pages()WP 1.2.0

Выводит ссылки навигации по страницам, для многостраничных постов (для разделения используется <!--nextpage-->, один или более раз в контенте).

Чтобы функция работала, нужно разделить контент записи html комментариями <!--nextpage-->. После этого функция разобьет контент на страницы. Страниц получиться столько, сколько раз был вставлен разделитель <!--nextpage--> + одна страница.

nextpage2

Пагинация по контенту страницы.

Этот Тег шаблона нужно использовать на отдельной странице. Условно можно сказать, что нужно использовать внутри Цикла WordPress.

Для быстрой вставки <!--nextpage--> в визуальном редакторе, используйте комбинацию клавиш: alt + shift + p.

Чтобы узнать находимся ли мы на странице пагинации, используйте функцию is_paged().

Возвращает

Строку. HTML код кнопок пагинации. Когда параметр echo=true, также выведет этот код на экран.

Шаблон использования

wp_link_pages( [
	'before'           => '<p>' . __('Pages:'),
	'after'            => '</p>',
	'link_before'      => '',
	'link_after'       => '',
	'next_or_number'   => 'number',
	'nextpagelink'     => __('Next page'),
	'previouspagelink' => __('Previous page'),
	'pagelink'         => '%',
	'echo'             => 1,
] );

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

<?php wp_link_pages( $args ); ?>
$args(строка/массив)
Параметры функции, передаваемые в виде массива или строки.

Аргументы параметра $args

before(строка)
Текст, который будет находится перед ссылками.
По умолчанию: '<p>Pages:'
after(строка)
Текст, который будет находится после ссылок.
По умолчанию: '</p>'
link_before(строка)
Текст, который будет до каждой ссылки. С версии 2.7.
По умолчанию: ''
link_after(строка)
Текст, который будет после каждой ссылки. С версии 2.7.
По умолчанию: ''
next_or_number(строка)
Переключатель, определяющий нужно ли показывать ссылки как номера всех страниц (number) или показать две ссылки навигации: "вперед", "назад". Может быть: number или next.
По умолчанию: 'number'
nextpagelink(строка)
Текст ссылки "следующая страница".
По умолчанию: 'Next page'
previouspagelink(строка)
Текст ссылки "предыдущая страница".
По умолчанию: 'Previous page'
pagelink(строка)
Формат текста ссылок. % будет заменено на число, так "Страница %" выведет ссылки с текстом: "Страница 1", "Страница 2" и т.д.
По умолчанию: '%'
echo(логический)
Выводить на экран (1) или возвращать для обработки (0).
По умолчанию: 1 (true)

Примеры

0

#1 Базовое использование

Выведем навигацию по страницам с параметрами по умолчанию, т.е. в теге <p>, с использованием постраничных ссылок (страница 1, страница 2) и ссылок навигации "назад", "вперед".

<?php wp_link_pages(); ?>
0

#2 Добавление кнопки разрыва страницы в Виз.Редактор TyniMCE

Такая кнопка предусмотрена WordPress но она не выводиться. Поэтому все что нам нужно сделать - это через хук добавить в массив название этой кнопки, остальное WP сделаем сам... Для этого нужно вставить такой код в functions.php темы:

## Добавление кнопки разрыва страницы в Виз.Редактор TyniMCE
add_filter('mce_buttons', 'mce_page_break');
function mce_page_break( $mce_buttons ){
	$pos = array_search('wp_more', $mce_buttons, true);

	if( $pos !== false ) {
		$buttons = array_slice( $mce_buttons, 0, $pos );
		$buttons[] = 'wp_page';
		$mce_buttons = array_merge( $buttons, array_slice($mce_buttons, $pos) );
	}

	return $mce_buttons;
}

В результате получим такую кнопку:

Кнопка "Следующая страница" в визуальном редакторе WordPress
Кнопка "Следующая страница" в визуальном редакторе WordPress
0

#3 Обернем ссылки в тег <div> и изменим текст каждой ссылки на "страница №":

<?php 
wp_link_pages( [ 
	'before'   => '<div id="page-links">',
	'after'    => '</div>',
	'pagelink' => 'page %'
] );
?>
0

#4 Использование опций предыдущей/следующей (вместо номеров страниц)

<?php
$args = array (
	'before'            => '<div class="page-links-XXX"><span class="page-link-text">' . __( 'Больше страниц: ', 'textdomain' ) . '</span>',
	'after'             => '</div>',
	'link_before'       => '<span class="page-link">',
	'link_after'        => '</span>',
	'next_or_number'    => 'next',
	'separator'         => ' | ',
	'nextpagelink'      => __( 'Следующая »', 'textdomain' ),
	'previouspagelink'  => __( '« Предыдущая', 'textdomain' ),
);

wp_link_pages( $args );
?>

Выше отображается на странице как это:

Больше страниц: « Предыдущая | Следующая »

“Предыдущая” и “Следующая” ссылки не будут отображаться, если на первой или последней страницах соответственно.

0

#5 Покажем ссылки страниц внутри других HTML тегов:

Выводит ссылки страниц в виде элементов списка внутри неупорядоченного списка и с пользовательскими именами классов:

<?php
wp_link_pages( [
	'before'      => '<ul class="page-links">',
	'after'       => '</ul>',
	'link_before' => '<li class="page-link">',
	'link_after'  => '</li>',
] );
?>

Альтернатива wp_link_pages

Навигация как в pagenavi. Когда нужно сделать навигацию как в этой статье, то вот код переделанный для страниц:

/**
 * Альтернатива wp_link_pages.
 *
 * ver: 2.0
 *
 * @param array $args {
 *
 *     @type string $text_num_page   Текст для количества страниц.
 *                                   {current} заменится текущей, а {last} последней.
 *                                   Пример: 'Страница {current} из {last}' = Страница 4 из 60
 *     @type int    $num_pages       Сколько ссылок показывать.
 *     @type int    $step_link       Шаг для дополнительных ссылок. Пример: 1,2,3...10,20,30
 *     @type string $dotright_text   Промежуточный текст до.
 *     @type string $dotright_text2  Промежуточный текст после.
 *     @type string $back_text       Текст «назад». Ставим '', чтобы не показыавть.
 *     @type string $next_text       Текст «вперед». Ставим '', чтобы не показыавть.
 *     @type string $first_page_text Текст первой страницы. Ставим '', чтобы не показыавть.
 *     @type string $last_page_text  Текст последней страницы. Ставим '', чтобы не показыавть.
 * }
 * @return string|false
 */
function kama_link_pages( array $args = [] ): string {
	global $page, $numpages;

	$defaults = [
		'text_num_page'   => '',
		'num_pages'       => 10,
		'step_link'       => 10,
		'dotright_text'   => '…',
		'dotright_text2'  => '…',
		'back_text'       => '« назад',
		'next_text'       => 'вперед »',
		'first_page_text' => '« к началу',
		'last_page_text'  => 'в конец »',
	];
	$r = wp_parse_args( $args, $defaults );

	$paged = max( 1, (int) $page );
	$max_page = (int) $numpages;
	if( $max_page < 2 ){
		return '';
	}

	$pages_to_show         = (int) $r['num_pages'];
	$pages_to_show_minus_1 = $pages_to_show - 1;

	$half_page_start = floor( $pages_to_show_minus_1 / 2 );
	$half_page_end   = ceil( $pages_to_show_minus_1 / 2 );

	$start_page = max( 1, $paged - $half_page_start );
	$end_page   = $paged + $half_page_end;

	if( ( $end_page - $start_page ) !== $pages_to_show_minus_1 ){
		$end_page = $start_page + $pages_to_show_minus_1;
	}

	if( $end_page > $max_page ){
		$start_page = max( 1, $max_page - $pages_to_show_minus_1 );
		$end_page   = $max_page;
	}

	$out = '';

	if( $r['text_num_page'] ){
		$out .= strtr( "<span class=\"pages\">{$r['text_num_page']}</span>", [
			'{current}' => $paged,
			'{last}'    => $max_page,
		] );
	}

	if( $r['back_text'] && $paged !== 1 ){
		$out .= _wp_link_page( $paged - 1 ) . $r['back_text'] . '</a>';
	}

	if( $start_page >= 2 && $pages_to_show < $max_page ){
		$out .= _wp_link_page( 1 ) . ( $r['first_page_text'] ?: 1 ) . '</a>';
		if( $r['dotright_text'] && $start_page !== 2 ){
			$out .= '<span class="extend">' . $r['dotright_text'] . '</span>';
		}
	}

	for( $i = $start_page; $i <= $end_page; $i++ ){
		$out .= ( $i === $paged )
			? '<span class="current">' . $i . '</span>'
			: _wp_link_page( $i ) . $i . '</a>';
	}

	// ссылки с шагом
	if( $r['step_link'] && $end_page < $max_page ){
		$dd = 0;
		for( $i = $end_page + 1; $i <= $max_page; $i++ ){
			if( ( $i % $r['step_link'] ) === 0 && $i !== $r['num_pages'] ){
				if( ++$dd === 1 ){
					$out .= '<span class="extend">' . $r['dotright_text2'] . '</span>';
				}
				$out .= _wp_link_page( $i ) . $i . '</a>';
			}
		}
	}

	if( $end_page < $max_page ){
		if( $r['dotright_text2'] && $end_page !== ( $max_page - 1 ) ){
			$out .= '<span class="extend">' . $r['dotright_text2'] . '</span>';
		}
		$out .= _wp_link_page( $max_page ) . ( $r['last_page_text'] ?: $max_page ) . '</a>';
	}

	if( $r['next_text'] && $paged !== $end_page ){
		$out .= _wp_link_page( $paged + 1 ) . $r['next_text'] . '</a>';
	}

	$out = '<div class="wp-pagenavi">' . $out . '</div>';

	return apply_filters( 'kama_link_pages', $out, $r, $paged, $max_page );
}

После того, как вставили код в файл темы functions.php вызываем функцию так:

<?php
echo kama_link_pages( [
	'num_pages' => 5
] );
?>

Заметки

  • Global. int. $page
  • Global. int. $numpages
  • Global. int. $multipage
  • Global. int. $more

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

С версии 1.2.0 Введена.
С версии 5.1.0 Added the aria_current argument.

Код wp_link_pages() WP 6.9

function wp_link_pages( $args = '' ) {
	global $page, $numpages, $multipage, $more;

	$defaults = array(
		'before'           => '<p class="post-nav-links">' . __( 'Pages:' ),
		'after'            => '</p>',
		'link_before'      => '',
		'link_after'       => '',
		'aria_current'     => 'page',
		'next_or_number'   => 'number',
		'separator'        => ' ',
		'nextpagelink'     => __( 'Next page' ),
		'previouspagelink' => __( 'Previous page' ),
		'pagelink'         => '%',
		'echo'             => 1,
	);

	$parsed_args = wp_parse_args( $args, $defaults );

	/**
	 * Filters the arguments used in retrieving page links for paginated posts.
	 *
	 * @since 3.0.0
	 *
	 * @param array $parsed_args An array of page link arguments. See wp_link_pages()
	 *                           for information on accepted arguments.
	 */
	$parsed_args = apply_filters( 'wp_link_pages_args', $parsed_args );

	$output = '';
	if ( $multipage ) {
		if ( 'number' === $parsed_args['next_or_number'] ) {
			$output .= $parsed_args['before'];
			for ( $i = 1; $i <= $numpages; $i++ ) {
				$link = $parsed_args['link_before'] . str_replace( '%', $i, $parsed_args['pagelink'] ) . $parsed_args['link_after'];

				if ( $i !== $page || ! $more && 1 === $page ) {
					$link = _wp_link_page( $i ) . $link . '</a>';
				} elseif ( $i === $page ) {
					$link = '<span class="post-page-numbers current" aria-current="' . esc_attr( $parsed_args['aria_current'] ) . '">' . $link . '</span>';
				}

				/**
				 * Filters the HTML output of individual page number links.
				 *
				 * @since 3.6.0
				 *
				 * @param string $link The page number HTML output.
				 * @param int    $i    Page number for paginated posts' page links.
				 */
				$link = apply_filters( 'wp_link_pages_link', $link, $i );

				// Use the custom links separator beginning with the second link.
				$output .= ( 1 === $i ) ? ' ' : $parsed_args['separator'];
				$output .= $link;
			}
			$output .= $parsed_args['after'];
		} elseif ( $more ) {
			$output .= $parsed_args['before'];
			$prev    = $page - 1;
			if ( $prev > 0 ) {
				$link = _wp_link_page( $prev ) . $parsed_args['link_before'] . $parsed_args['previouspagelink'] . $parsed_args['link_after'] . '</a>';

				/** This filter is documented in wp-includes/post-template.php */
				$output .= apply_filters( 'wp_link_pages_link', $link, $prev );
			}
			$next = $page + 1;
			if ( $next <= $numpages ) {
				if ( $prev ) {
					$output .= $parsed_args['separator'];
				}
				$link = _wp_link_page( $next ) . $parsed_args['link_before'] . $parsed_args['nextpagelink'] . $parsed_args['link_after'] . '</a>';

				/** This filter is documented in wp-includes/post-template.php */
				$output .= apply_filters( 'wp_link_pages_link', $link, $next );
			}
			$output .= $parsed_args['after'];
		}
	}

	/**
	 * Filters the HTML output of page links for paginated posts.
	 *
	 * @since 3.6.0
	 *
	 * @param string       $output HTML output of paginated posts' page links.
	 * @param array|string $args   An array or query string of arguments. See wp_link_pages()
	 *                             for information on accepted arguments.
	 */
	$html = apply_filters( 'wp_link_pages', $output, $args );

	if ( $parsed_args['echo'] ) {
		echo $html;
	}
	return $html;
}
21 комментарий
Полезные - 1Вопросы - 1 Все