Мой основной проект: Боевые искусства в кинематографе! (fight-films.info)

Свеженькое
Реакция публики
Облако пометок

Пагинация на WordPress своими руками

НавигацияОчень немаловажный компонент современных веб-сайтов - это . Когда контента накопилось уже достаточно много, то приходится разбивать его на страницы. Это, во-первых, удобно, во-вторых - не загружает сайт, т.к. прогрузка 100 статей на одну страницу даст о себе знать, какой бы мощный сервер не был.

В WordPress есть встроенная , но она неудобная, точней - довольно слабо функциональная.

Разработчики WordPress, видно, долго не думали когда создавали навигационную структуру в своем движке, ибо 2 кнопки "предыдущая страница" и "следующая страница", как бы даже сложно назвать навигацией... А если пользователь находясь на 342 странице хочет перейти на 334, при этом не в обход 8-ми страниц, а одним кликом? Собственно, не думаю что необходимо рассказывать о недостатках встроенной пагинации.

Многие лечат это дело плагинами, но я против плагинов в принципе. Считаю что таких элементарных вещей можно добиться и не давая на сайт лишнюю нагрузку, у WordPress, как известно, и без этого хватает проблем. Итак...

Создаем собственную пагинацию на WordPress

Для начала создадим файл, отвечающий за нашу навигацию, назовем его navi. , к примеру. Далее откроем его и запишем следующее:

<?php
global $wp_query;
$max_page = $wp_query->max_num_pages;
$nump=10;
if($max_page>1){
	$paged = intval(get_query_var('paged'));
	if(empty($paged) || $paged == 0) $paged = 1;
	echo '<div id="navi">';
	echo '['.$paged.'-ая страница из '.$max_page.']';
	if($paged!=1) echo '<a href="'.get_pagenum_link(1).'" title="Перейти в начало">«Первая</a>';
		else echo 'Первая страница';
	if($paged-$nump>1) $start=$paged-$nump; else $start=2;
	if($paged+$nump<$max_page) $end=$paged+$nump; else $end=$max_page-1;
	if($start>2) echo "&#x2194;";
	for ($i=$start;$i<=$end;$i++)
	 {
	 if($paged!=$i) echo '<a href="'.get_pagenum_link($i).'" title="Перейти на  '.$i.'-ю страницу из '.$max_page.'">'.$i.'</a>';
		else echo '<b> '.$i.' </b>';
	 }
	if($end<$max_page-1) echo "&#x2194;";
	if($paged!=$max_page) echo '<a href="'.get_pagenum_link($max_page).'" title="Перейти на последнюю страницу">Последняя»</a> ';
		else echo 'Последняя страница';
	echo '</div>'	;
	}
?>

Как видно, код довольно маленький по сравнению со своими "братьями" чуть ли не до мегабайта... Из на страиваемого в скрипте в основном только количество отображаемых страниц слева\справа от текущей. Это строка 3, $nump=10; , где "10" количество этих самых страниц. Ставим там какую угодно цифру и редактируем русский текст как хочется.

Подключается файл в шаблон стандартно:

<?php include_once 'navi.php'; ?>

Втыкаем в любом месте шаблона и смотрим что получилось. А получилось то, что все ссылки без стилей и выглядят некрасиво. Это лечится. Открываем свой style.css и пишем какие угодно стили для этих названий:

#navi{}
#navi a{}
#navi a:hover{}

Собственно, все. Код лаконичный, поддерживает все что надо и отвечает требованиям.

Всего комментариев: 3
  1. Кашпер:

    Спасибо огромное!!! У меня стоял плагин Pagebar2 Из-за которого отваливалась такая полезная штука, как Tinymce Advanced,
    теперь проблема решена)

    • BarSug:

      Благодарю, очень рад что информация оказалась полезной. :)

  2. Passtuh:

    Спасибо. *ok* Только учусь делать шаблоны на ВП и сразу затревожило *dash* что нету нормальной пагинации. :-)