WordPress как на ладони
Плагин рекламы для WordPress wordpress jino

Пагинация для отдельной записи WordPress

Не все знают, что в WordPress отдельную запись или страницу можно разбить на несколько частей, организовав таким образом пагинацию для записи (поста). Для этого в контенте нужно использовать шоткод <!--nextpage-->. Такой код будет делить текст записи на несколько страниц. И URL, например, второй страницы будет выглядеть так: http://wptest.ru/privet-mir/2/

Эта возможность пригодится тем, кто планирует размещать объемные записи, с большим количеством картинок или текста, когда удобно разбить такое длинное полотно на части (подстраницы).

Такая пагинация используется не часто, поэтому в стандартном WordPress редакторе (TinyMCE) нет кнопки для такой разбивки на страницы. Разбивка достигается путем вставки следующего html-кода в текстовом редакторе в нужном месте:

<!--nextpage-->

Или нажатием комбинации клавиш Shift + Alt + P в визуальном редакторе, в код при этом будет вставлен такой же HTML комментарий: <!--nextpage-->.

После вставки такого кода-комментария-разделителя на странице во фронтенде сайта появится подобная пагинация (зависит от оформления темы):

Страница разделенная на несколько страниц пагинации

А каждая страница пагинации будет иметь подобный URL:

  • http://wptest.ru/privet-mir/2/
  • http://wptest.ru/privet-mir/3/

Добавление кнопки в визуальный редактор

Когда нужна частая вставка такого тега разбиения страницы на несколько подстраниц, удобно иметь кнопку вставки нужно тега.

Для добавления соответствующей кнопки в редактор WordPress, нужно добавить небольшой фрагмент кода в 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 + 1 );
		$buttons[]   = 'wp_page';
		$mce_buttons = array_merge( $buttons, array_slice($mce_buttons, $pos + 1) );
	}
	return $mce_buttons;
}

После этого в редакторе появится новая кнопка:

Кнопка для вставки тега разбиения страницы

Того же результата можно достичь установкой плагина TinyMCE Page Break Button

Поддержка темы

Обратите внимание, что вывод страниц или записей с пагинацией предусмотрен не всеми WordPress темами.

Соответствующий файл шаблона вашей темы после вывода контента страницы должен содержать функцию wp_link_pages():

wp_link_pages( array(
	'before'      => '<div class="page-links"><span class="page-links-title">' . __( 'Pages:', 'twentyfifteen' ) . '</span>',
	'after'       => '</div>',
	'link_before' => '<span>',
	'link_after'  => '</span>',
	'pagelink'    => '<span class="screen-reader-text">' . __( 'Page', 'twentyfifteen' ) . ' </span>%',
	'separator'   => '<span class="screen-reader-text">, </span>',
) );

Глобальные переменные

Когда нужно проверить разбит ли пост на страницы, сколько всего страниц, получить контент конкретной страницы и т.д. Можно пользоваться глобальными переменными, которые определяются внутри цикла WordPress, функцией setup_postdata(), которая в свою очередь вызывается либо напрямую, либо через функцию the_post().

Список таких глобальных переменных внутри цикла:

$page(число)
Страница текущей записи, когда пост разделен на страницы с помощью тега <!--nextpage-->.
$pages(массив)
Контент страниц текущей записи (поста). Каждая страница тут разделяется с помощью тега <!--nextpage-->.
$multipage(логический)
Определяет разделяется ли текущая запись на страницы с помощью тега <!--nextpage-->. Содержит true или false.
$numpages(число)
Количество страниц, если запись разделена на страницы с помощью тега <!--nextpage-->.

С помощью этих глобальных переменных можно делать такие проверки, внутри цикла:

# Проверка разделения записи на страницы

Взято из описания is_paged()

Пример 1

$paged = $wp_query->get( 'page' );

if ( $paged < 2 ){
	// Это первая страница или пост не разделен на страницы
}
else {
	// Это 2,3,4 ... страница разделенного поста.
}

Пример 2

$paged = get_query_var( 'page' ) ? get_query_var( 'page' ) : false;
if ( $paged < 2 ){
	// Пост не разделен на страницы или это не первая страница.
}
else {
	// Это 2,3,4 ... страница разделенного поста.

}

Пример 3

Проверим разделен ли пост на страницы вообще...

the_post();

if( !empty($GLOBALS['multipage']) ){
	// запись разделена на страницы
}

Узнаем сколько страниц у записи

the_post();

if( !empty($GLOBALS['numpages']) ){
	if( $GLOBALS['numpages'] === 1 ){
		// запись разделена на страницы
	}
	else {
		// запись разделена на страницы
		echo "Кол-во страниц {$GLOBALS['numpages']}";
	}
}
Eugene Kopich 100web2033.com
Creative sites for creative people ★ Digital marketing
Пагинация для отдельной записи WordPress Комментариев нет

Здравствуйте, !

Ваш комментарий