wp_link_pages()
Выводит ссылки навигации по страницам, для многостраничных постов (для разделения используется <!--nextpage-->, один или более раз в контенте).
Чтобы функция работала, нужно разделить контент записи html комментариями <!--nextpage-->. После этого функция разобьет контент на страницы. Страниц получиться столько, сколько раз был вставлен разделитель <!--nextpage--> + одна страница.
Этот Тег шаблона нужно использовать на отдельной странице. Условно можно сказать, что нужно использовать внутри Цикла 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)
Примеры
#1 Базовое использование
Выведем навигацию по страницам с параметрами по умолчанию, т.е. в теге <p>, с использованием постраничных ссылок (страница 1, страница 2) и ссылок навигации "назад", "вперед".
<?php wp_link_pages(); ?>
#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;
}
В результате получим такую кнопку:

#3 Обернем ссылки в тег <div> и изменим текст каждой ссылки на "страница №":
<?php wp_link_pages( [ 'before' => '<div id="page-links">', 'after' => '</div>', 'pagelink' => 'page %' ] ); ?>
#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 ); ?>
Выше отображается на странице как это:
Больше страниц: « Предыдущая | Следующая »
“Предыдущая” и “Следующая” ссылки не будут отображаться, если на первой или последней страницах соответственно.
#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. |

