Постраничная навигация в WordPress без плагина (альтернатива WP-PageNavi)

Практически любой блоггер, который ведет свой блог на движке WordPress, знаком с плагином WP-PageNavi, который выводит постраничную навигацию такого вида:

Постраничная навигация в WordPress без плагина

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

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

Функция, которую я вам предлагаю, совсем небольшая по размеру:


function wp_corenavi() {
	global $wp_query;
	$pages = '';
	$max = $wp_query->max_num_pages;
	if (!$current = get_query_var('paged')) $current = 1;
	$a['base'] = str_replace(999999999, '%#%', get_pagenum_link(999999999));
	$a['total'] = $max;
	$a['current'] = $current;

	$total = 1; //1 - выводить текст "Страница N из N", 0 - не выводить
	$a['mid_size'] = 3; //сколько ссылок показывать слева и справа от текущей
	$a['end_size'] = 1; //сколько ссылок показывать в начале и в конце
	$a['prev_text'] = '«'; //текст ссылки "Предыдущая страница"
	$a['next_text'] = '»'; //текст ссылки "Следующая страница"

	if ($max > 1) echo '<div class="navigation">';
	if ($total == 1 && $max > 1) $pages = '<span class="pages">Страница ' . $current . ' из ' . $max . '</span>'."\r\n";
	echo $pages . paginate_links($a);
	if ($max > 1) echo '</div>';
}

Данный код необходимо поместить в файл functions.php вашего шаблона. В функции всего пять опций, они отделены разрывами строк. Комментарии я написал, думаю, тут все понятно.

Для того, чтобы вывести навигацию в нужном месте, вставляйте в шаблон следующий код:


<?php if (function_exists('wp_corenavi')) wp_corenavi(); ?>

HTML-код, который получается в результате вывода функции, выглядит следующим образом:


<div class="navigation">
	<span class="pages">Страница 7 из 27</span>
	<a class='prev page-numbers' href='http://wordpress31/page/6/'>&laquo; Предыдущая</a>
	<a class='page-numbers' href='http://wordpress31/page/1/'>1</a>
	<span class='page-numbers dots'>...</span>
	<a class='page-numbers' href='http://wordpress31/page/4/'>4</a>
	<a class='page-numbers' href='http://wordpress31/page/5/'>5</a>
	<a class='page-numbers' href='http://wordpress31/page/6/'>6</a>
	<span class='page-numbers current'>7</span>
	<a class='page-numbers' href='http://wordpress31/page/8/'>8</a>
	<a class='page-numbers' href='http://wordpress31/page/9/'>9</a>
	<a class='page-numbers' href='http://wordpress31/page/10/'>10</a>
	<span class='page-numbers dots'>...</span>
	<a class='page-numbers' href='http://wordpress31/page/27/'>27</a>
	<a class='next page-numbers' href='http://wordpress31/page/8/'>Следующая &raquo;</a>
</div>

Как видите, присутствуют все необходимые CSS-классы, которые можно использовать для оформления любого элемента навигации (например, текущую страницу, ссылки на предыдущую и следующую страницы).

Проверял данную функцию на версиях WordPress, начиная с 2.3.3, а также тестировал варианты с включенным и отключенным ЧПУ. Все работает, как и полагается.

Пользуйтесь.

* * *

Если вам нужен надежный хостинг и регистрация доменов, то вас ждет крупнейших украинский хостинг-провайдер FREEhost.UA, который готов предложить любой вид хостинга, начиная от виртуального, заканчивая арендой готового сервера.

Комментарии (226)

  1. Большое спасибо автору. Успехов!

  2. не читал все комментарии, а что делает строка
    $a[‘base’] = str_replace(999999999, ‘%#%’, get_pagenum_link(999999999));
    ?

    • Что-то связанное с получением правильных ссылок. Точно не знаю.

      • Значит я близко к решению проблемы, у меня на всём сайте пагинация работает корректно, а вот на заданной пользователем отдельной таксономии вместо «/page/2» выводится «/2», в следствие чего на ссылку первой пагинации не удаётся перейти
        Буду бороть, но всё равно спасибо! :-)

  3. а как обернуть ссылки в li ?

  4. немогу понять как сделать чтоб на главной выбивалось всего 4 статьи остальное уходило в пагинацию

  5. У меня вместо цифр стоит «следующая страница» а нельзя ли это поменять в настройках ВП, не влезая в файлы шаблона?

  6. Спасибо за статью! Добавил постраничную навигацию на свой сайт techbez01.ru без плагина. Круто!

  7. Добрый день! Код замечательный, много раз меня выручал. Но, попытка использовать его для вывода пагинации для кастомных типов записей не увенчалась успехом. Подскажите можно ли его адаптировать для использования на страницах с кастом пост тайпами.

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