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

Свеженькое
Реакция публики
Облако пометок
css Google html SEO WordPress Яндекс видео графический дизайн заработок индексация интернет ключевые слова контент партнерка поисковые системы посещаемость продвижение раскрутка реклама сайт статья хостинг

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

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

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

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

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

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

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

<?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* что нету нормальной пагинации. :-)