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

Постраничная навигация для WordPress Привет, ребята. Сегодняшний пост родился, можно сказать, не случайно. Не подумайте, что я вдруг решил написать баян, который и так все знают и, что не раз уже писалось на различных блогах. Вовсе нет, и приставка «Правильная» в названии поста кое-что обозначает.

Все началось с того, что некоторые системы анализа сайтов мне показывали полные дубли некоторых страниц блога (например, http://alaev.info/blog и http://alaev.info/blog/, http://alaev.info/blog/category/seo и http://alaev.info/blog/category/seo/ и др.), притом, что этих страниц я не мог найти вупор, да и сами дублирующие адреса автоматически редиректились на правильные (правильные у меня это без слеша на конце). Я не мог понять откуда это берется и где робот-анализатор мог их находить. Ночами перестал спокойно спать из-за этого…

Я начал очень тщательно просматривать все внутренние ссылки блога, вдруг я где-то сам установил такие ссылки и не заметил. Но как вы уже, наверное, поняли из заголовка поста, я нашел проблему в постраничной навигации моего WP.

Первая мысль – кривой плагин WP-Pagenavi, не иначе. Пошел делать «распил» файлов плагина, там оказалось все не просто и очень запутано, но я разобрался с проблемой за полчаса. Но это не главное.

Я вспомнил, что когда-то слышал, что можно сделать постраничную навигацию для WordPress и без всяких плагинов – пошел искать и тут же нашел множество вариантов. У меня была надежда, что если делать все самому и вручную без плагинов, то таких косяков быть не должно. Оказалось иначе – некоторые «самопалы» на деле оказались еще хуже, и вместо того чтобы показывать ссылку на основную страницу и без слеша, как мне надо, они показывали /page/1, что является полным дублем основной страницы, при этом реально существующим.

Чтож, опять придется «пилить» — мне не в первой. Для этого я выбрал самое адекватное из найденных решений (вот оно) за что большое спасибо блогу wp-kama.ru. Кстати, проблема постраничной навигации в этом варианте такая же как и в плагине WP-Pagenavi – лишний слеш для первой страницы. Но есть несомненный плюс – мы избавимся от плагина!

Итак, несколько причин, по которым стоит отказаться от плагина WP-Pagenavi в пользу альтернативы, предложенной в этом посте:

  1. За удобство настроек в админ панели приходится платить ценой лишних запросов, так как эти настройки сохраняются в БД, а затем от туда и берутся, хотя это в теории, а на практике они берутся из кэша опций WordPress, но тем не менее…
  2. В продолжение первого пункта – удобство в данном случае дело сомнительное – постраничная навигация, это такое дело, что настроил однажды и забыл. А заменить несколько значений в коде (в котором, кстати, есть все пояснения) не составит труда даже новичку.
  3. Если вы продвинутый пользователь и не впервые слышите слово «php», то при желании что-то изменить (будь то внешний вид или что-то еще) это ни составит никакого труда – код простой, понятный и лаконичный.
  4. При написании кода, его автор kama использовал те же css стили, что и использует плагин Pagenavi, так что вам даже не придется заново все оформлять.
  5. Ну и последний пункт, самый важный, ради которого все и затевалось – будут нормальные ссылки на первую страницу, не возникнет никаких дублей и лишних редиректов.

Меньше слов, больше дела – рассмотрим код и что с ним делать.

Открываем в админке «Внешний вид -> Редактор» и выбираем Функции темы (functions.php). В самое начало этого файла вставляем следующий код:

/*** Альтернатива wp_pagenavi (без лишних обращений к данным) ***/
 
function kama_pagenavi($before='', $after='', $echo=true) {
 
	/* ================ Настройки ================ */
	$text_num_page = ''; // текст для количества страниц. {current} заменится текущей, а {last} последней. Пример: 'Страница {current} из {last}' = Страница 4 из 60
	$num_pages = 10; // сколько ссылок показывать
	$stepLink = 10; // после навигации ссылки с определенным шагом (значение = число (какой шаг) или '', если не нужно показывать). Пример: 1,2,3...10,20,30
	$dotright_text = '…'; // промежуточный текст "до".
	$dotright_text2 = '…'; // промежуточный текст "после".
	$backtext = '«'; // текст "перейти на предыдущую страницу". Ставим '', если эта ссылка не нужна.
	$nexttext = '»'; // текст "перейти на следующую страницу". Ставим '', если эта ссылка не нужна.
	$first_page_text = ''; // текст "к первой странице" или ставим '', если вместо текста нужно показать номер страницы.
	$last_page_text = ''; // текст "к последней странице" или пишем '', если вместо текста нужно показать номер страницы.
	/* ================ Конец Настроек ================ */ 
 
	global $wp_query;
	$posts_per_page = (int) $wp_query->query_vars[posts_per_page];
	$paged = (int) $wp_query->query_vars[paged];
	$max_page = $wp_query->max_num_pages;
 
	if($max_page <= 1 ) return false; //проверка на надобность в навигации
 
	if(empty($paged) || $paged == 0) $paged = 1;
 
	$pages_to_show = intval($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 = $paged - $half_page_start; //первая страница
	$end_page = $paged + $half_page_end; //последняя страница (условно)
 
	if($start_page <= 0) $start_page = 1;
	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_page - $pages_to_show_minus_1;
		$end_page = (int) $max_page;
	}
 
	if($start_page <= 0) $start_page = 1;
 
	$out=''; //выводим навигацию
		$out.= $before."<div class='wp-pagenavi'>\n";
				if ($text_num_page){
					$text_num_page = preg_replace ('!{current}|{last}!','%s',$text_num_page);
					$out.= sprintf ("<span class='pages'>$text_num_page</span>",$paged,$max_page);
				}
 
				if ($start_page >= 2 && $pages_to_show < $max_page) {
					$out.= '<a href="'.rtrim(get_pagenum_link(), '/').'">'. ($first_page_text?$first_page_text:1) .'</a>';
					if($dotright_text && $start_page!=2) $out.= '<span class="extend">'.$dotright_text.'</span>';
				}
 
				if ($backtext && $paged!=1) $out.= '<a href="'.rtrim(get_pagenum_link(($paged-1)), '/').'">'.$backtext.'</a>';
 
				for($i = $start_page; $i <= $end_page; $i++) {
					if($i == $paged) {
						$out.= '<span class="current">'.$i.'</span>';
					} else {
						$out.= '<a href="'.rtrim(get_pagenum_link($i), '/').'">'.$i.'</a>';
					}
				}
 
				if ($nexttext && $paged!=$end_page) $out.= '<a href="'.get_pagenum_link(($paged+1)).'">'.$nexttext.'</a>';
 
				//ссылки с шагом
				if ($stepLink && $end_page < $max_page){
					for($i=$end_page+1; $i<=$max_page; $i++) {
						if($i % $stepLink == 0 && $i!==$num_pages) {
							if (++$dd == 1) $out.= '<span class="extend">'.$dotright_text2.'</span>';
							$out.= '<a href="'.get_pagenum_link($i).'">'.$i.'</a>';
						}
					}
				}
 
				if ($end_page < $max_page) {
					if($dotright_text && $end_page!=($max_page-1)) $out.= '<span class="extend">'.$dotright_text2.'</span>';
					$out.= '<a href="'.get_pagenum_link($max_page).'">'. ($last_page_text?$last_page_text:$max_page) .'</a>';
				}
 
		$out.= "</div>".$after."\n";
	if ($echo) echo $out;
	else return $out;
}

Многие могут не заметить, чем именно мой вариант отличается от оригинала, предложенного kama. Поясняю: изменен порядок вывода, то есть местами поменяны некоторые элементы, теперь стало более юзабельно; и самое главное – при формировании некоторых ссылок я применил php-функцию string rtrim ( string $str [, string $charlist ] ), которая возвращает мне строку, но без слеша в конце, если он есть – что, собственно, и требовалось изначально.

Далее во всех файлах шаблона, в которых требуется добавить навигацию, необходимо в удобное место вставить:

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

Если вы затрудняетесь с тем куда это надо вставлять, просто ищите что-то подобное:

<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>

И заменяйте на указанную выше строку.

Вот и все готово, друзья!

Теперь остается открыть файл /wp-content/plugins/wp-pagenavi/pagenavi-css.css скопировать оттуда весь код и вставить его в свой css файл (обычно это style.css и лежит в папке с вашей темой оформления).

Ну и последний шаг – деактивируем плагин WP-Pagenavi в админке и удаляем полностью его папку с сервера ;)

PS Ради интереса проверил первые пришедшие в голову блоги – на всех имеется такая проблема, решение которой я описал :)

Удачи вам, друзья, и помните – в SEO не бывает мелочей!

Задавайте вопросы, комментируйте. До связи.

С уважением, Александр Алаев
 
Ерунда и баянЪ!Зачет! Плюсую!
+13
 
Оптимизация сайта

Профессиональный технический аудит и оптимизация вашего сайта.
Тот самый необходимый «фундамент» для успешного продвижения.

от 10 000 руб.
Продвижение сайта

Комплексный подход к решению поставленных задач, будь то достижение заветных позиций в ТОП 10 или увеличение трафика на сайт. В стоимость уже включены полный технический аудит и оптимизация сайта.

от 15 000 руб.
Консультация

У вас недостаточно знаний?
Нужен ответ на ряд вопросов?
Хотите узнать мнение эксперта?
Вы задаете вопрос — я на него отвечаю!

1 500 руб./час
 
Получай новости блога АлаичЪ'а на e-mail:
 
Другие посты из категории WordPress:
Что нового на форуме:
  1. Dimox (19 комм.)

    Под самопалом, я так понимаю, ты имеешь в виду функцию типа этой — http://dimox.name/wordpress-pagination-without-a-plugin/

    Если бы у тебя ЧПУ был со слешем на конце, тогда обозначенной тобой проблемы не было бы (даже при использовании WP-Pagenavi). Когда есть слеш на конце, то при переходе по ссылке вида site.ru/page/1/ происходит автоматический редирект на site.ru/, так что в этом случае никакого дублирования нет. Можешь увидеть это на моем сайте.

    Ответить
    • АлаичЪ

      Дима, да, под "самопалом" я подразумевал и твой вариант, я его, кстати, тоже испробовал у себя на блоге. Но ты не обижайся, "самопал" это и то, что написано выше, да и вообще все остальные мои (и не только мои) разработки под WordPress.

      Так исторически сложилось, что ЧПУ у меня без слеша, и я прекрасно понимаю, что если бы он, слеш, был, то проблема бы не существовала.

      Опять же, не только в этом дело. Редирект у меня есть (со страниц со слешем на страницы без него), но вот он мне и не давал спокойствия, и цель была избавиться от этого лишнего редиректа. Я, конечно, заморочился сильно, но зато теперь сплю спокойно ;)

      Ответить
      • Dimox (19 комм.)

        Да я не обижаюсь =) Главное, что ты решил проблему.

        Ответить
        • АлаичЪ

          Да уж, у меня как всегда все нетривиально получается и так же точно решается ;)

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

          Ответить
          • Dimox (19 комм.)

            Пожалуйста. И тебе спасибо за отзыв ;)

            Ответить
  2. Kocmoc (77 комм.)

    Очень даже убедительно! Вообще я уже давно хочу отказаться от этого плагина, всё никак руки не доходят, но раз уж всё разжёвано, то остаётся лишь в ротик положить :)

    Я же правильно понял, после обновления WordPress ничего не слетает?

    Ответить
    • АлаичЪ

      Давно пора ;)

      Да, после обновления ничего не испортится. Испортиться может только после смены темы оформления, именно в файлах темы хранятся все необходимые функции.

      Ответить
  3. Андрей (1 комм.)

    Проблем на сайте у меня, конечно, не мало, но постраничная навигация пока основная в моей голове. Я даже придумал себе оправдание, что так люди хоть поплутают немного у меня :) Все, пора их выводить из сумрака!

    Ответить
  4. Данил (1 комм.)

    спасибо пригодилось очень, а то с плагином как то с костылем а так хорошо.

    Ответить
  5. Антон (1 комм.)

    Спасибо! Пролазил по интернету и ничего не нашел (везде плагины суют), а тут все просто и со вкусом)

    Ответить
  6. AKart (1 комм.)

    Классный способ! Берем на вооурежение. Я уже давно пользуюсь камовскими хаками, отличные идеи предлагают!

    Ответить
  7. Egogoshka (1 комм.)

    Саша, спасибо. Классный пост. Вставил твой код себе на блог. Правда внешний вид не такой, как у тебя :-). А вид твоей навигации ты настраивал в таблице стилей?

    Буду читать твой блог — очень уютненький. Чувствуется, что сделано с любовью. Скажи, а как ты сделал, что у тебя в блоге сайдбар есть, а в самих постах нет?

    Ответить
    • АлаичЪ

      Да, внешний вид настраивается в css-стилях темы.

      Сайдбар выводится у меня везде, кроме записей. Кстати, в разных разделах сайдбар разный ;) Это все сделано с помощью дополнительных файлов шаблонов.

      Ответить
  8. Евгений (14 комм.)

    Саша, привет. Слушай а ты не сталкивался с такой ситуацией. Есть сайт на WP. На нем продвигаются категории.Текст на странице с определенной категорией выводиться с помощью echo category_description (); т.е. тот что в описании для категории каждой. И есть постраничная навигация на категориях. Т.е. заходим в раздел, там заголовок, потом текст, потом список товаров и навигация. Переходим на вторую страницу — там соответственно также, только к тайтлу добавляется бла бла — Страница 2. Так вот, вопрос вот в чем — можно ли как то написать условие , чтобы при переходе на страницу, отличную от страницы 1 категории, текст не выводился? Т.е. на первой странице к примеру есть текст, а нажимаем на вторую и далее, то показывается просто список товаров. На мой взгляд так с точки зрения SEO будет лучше, чтобы дубли не плодить.

    Ответить
    • АлаичЪ

      Да, такое можно сделать очень просто.

      Если для вывода используется только echo category_description (); тогда заменим это на:

      if ($paged==1) echo category_description ();

      И все должно работать, должно выводиться описание только на первой странице.

      Ответить
      • Евгений (14 комм.)

        Ооо, спасибо. Работает, только изменил на 0 if ($paged==0) echo category_description (); У меня код постраничной немного другой (dimox), может из за этого. Ну а так проверил все работает.

        Ответить
        • АлаичЪ

          Ну да, у кого то отсчет с нуля начинается, у кого то с единицы. Но главное, что принцип ясен, и что все работает!

          Ответить
  9. Armen (1 комм.)

    Привет! Можете помочь написать такую пагинацию для конкретного плагина?

    Плагин я написал(задача с новой работы), осталось только пагинацию написать. Плагин для регистрации работников(создает в базе новую таблицу для сохранении данных о работников: Worker_id, Name, Mail), на админ странице надо вывести список работников по 10 штук, и чтобы были ссылки Next, Prev, Last, First. Заранее большое спасибо ! ! !

    Ответить
    • АлаичЪ

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

      Ответить
  10. Роман (1 комм.)

    Я не специалист в php, но если не сложно объясните, почему в одном случае вы используете

    $out.= '<a href="'.rtrim (get_pagenum_link ($i), '/').'">'.$i.'</a>';

    а в другом $out.= '<a href="'.get_pagenum_link ($i).'">'.$i.'</a>';

    Просто так получается ссылка на страницу 2 выглядит /page/2 (без слеша),

    а ссылка "следующая страница" выглядит /page/2/ (со слешем).

    Разве не от подобных дублей вы пытались избавится?

    Ответить
    • АлаичЪ

      Я делал для себя — а у меня нет ссылок "вперед" и "назад" — у меня только нумерация страниц, а с ней все в порядке.

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

      Ответить
  11. Antonina (1 комм.)

    Не первый блог уже вижу, что пишут о постраничной навигации, а на собственном блоге ее нет. Вы пишете, что делали для себя, а где же она? Или на другом блоге?

    Ответить
    • АлаичЪ

      Смотрите внимательно и не позорьтесь больше =)

      Ответить
      • Наталья (26 комм.)

        Александр, ну может и я слепая? Но в упор никакой постраничной навигации на сайте не вижу. Могу скриншотик предоставить ;) (захожу с гугл.хрома) А мне нужна позарез. У меня ни плагина, ничего такого нет. Вы адрес сайта видите мой... Вот вопрос: тогда у меня стоит перелистывание на предыдущую статью видимо (назад и вперед это наверное правильно назвать) не будут они конфликтовать? если я сначала (как я поняла) установлю плагин постраничной навигации пагенави, потом пропишу код и удалю плагин... Как оно будет?

        По коду вебмастера Максима у меня ничего не получилось например. Не было тех файлов, куда код вставить чтоб постраничка заработала (тема такая)(так и называется сайт вебмастер Максим)

        Еще вопрос, Может подскажете как шапку сайта поправить может и не шапку, а основную часть. При установке кода постранички (с вебмастера Максим) сильно поднялась шапка над содержимым — там лишняя строка видимо. Я не разобралась где нашкодила :( Максим не поможет...

        Ответить
        • АлаичЪ

          Ну, может быть забыли кеш почистить после правок — это надо делать обязательно. И какой еще Максим?

          Ответить
          • Наталья (26 комм.)

            Вы меня не поняли. У меня то ее точно нет, я ее не смогла поставить... А кеш я начищаю через каждый раз как что-то сделаю (наверное слишком часто даже ;) Я конкретно у Вас не вижу, что есть постраничная навигация. Если есть — то ее не видно. На главную ходила...тоже нет!

            А попытки поставить код веду прочитав код с сайта вебмастер Максим. Ну раз просите, вот адресок (в ТОПЕ он первый, вы третий) по запросу "постраничная навигация по сайту без плагина": webmastermaksim.ru/wordpress/postranichnaya-navigaciya-wordpress-bez-plaginov.html если зайдете мои комменты увидите ;)

            Снова поясню, раз не понятно. У меня нет некоторых страниц, описанных в статье Максима, а может еще какая причина. Но код у меня не заработал, а шапка сайта (у меня) поднялась. Надеюсь понятно объяснила.

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

            А вместо постраничной навигации сейчас у меня стоит (вперед/назад) следущие/предыдущие и все. Этого мало! Надо чтоб 1,2,3,45,20 и т.д. листать, сами понимаете, сложновато, лучше чтоб на цифру и вперед.

            Ответить
            • АлаичЪ

              У меня есть постраничная навигация, ну как ее можно не заметить?! Тут http://alaev.info/blog в самом низу как раз то, о чем данный пост.

              Все должно работать. Большой код из поста надо вставить в файл functions.php сразу после <?php (или <?).

              А после этого в файле index.php (например, после <?php endif; ?>) добавить <?php if (function_exists('kama_pagenavi')) kama_pagenavi(); ?>

              Может, что-то кардинально в шаблонах изменилось в новых версиях WP — я не знаю, какая у вас версия, у меня 2.8.x.

              Ответить
              • Наталья (26 комм.)

                Алексндр, привествую! Буду пробовать код в действии раз все нормально и конфликтов быть не должно. а вот почему я вашу постраничную навигацию не видела. Я смотрела в статьях и вот здесь http://alaev.info/ на ГЛАВНОЙ, а она у вас оказывается с БЛОГА начинается. Я то думала Главная это и есть начало. Мне это не очень понятно почему так и зачем у вас главная отдельно от всего блога как бы. У меня самая последняя версия вордпресс. Все обновляю и плагины и сам вордпресс. Может оно конечно и не надо (обновляться), но я еще это мозгом своим не поняла — мне до вашего уровня расти и расти. Напишу позже что получится у меня.

                Сразу вопрос есть ли у вас рецепт использования вывода (тут я уже теряюсь как правильно) с Главной анонсов, в которых не будут видны ссылки. Так чтоб ссылки проявлялись только когда в саму статью зайдешь. Функция вывода the_excerpt. Что я хочу: Чтоб был на главной анонс статьи с картинкой и тегом мор (читать делее) и число знаков такое как мне надо, а не железное например 100 или 150 — то есть по сути как сейчас, только чтоб вот ссылок не было видно. Это плохо когда на главной очень много внутренних ссылок. Не более 100 ведь рекомендуют... А так мне приходится то меньше 5 статей на главную выводить ... вообщем проверять все время и не красиво с ссылками смотрится... Еще бы ссылки научится делать не подчеркнутыми :)

                Ответить
                • АлаичЪ

                  Странно, коммент отправлял еще на прошлой неделе — куда-то подевался :( А я такой большой коммент написал... Расстроился, поэтому ниже напишу кратко.

                  Ерунда это все про количество ссылок на главной, используйте как и прежде вывод публикации до тега <!--more--> — тут и количество знаков регулировать можно и картинка будет.

                  А чтобы ссылки подчеркивались, необходимо в style.css прописать:

                  a, a:link, a:active, a:hover, a:visited {text-decoration:underline;}

                  Ответить
                  • Наталья (26 комм.)

                    Да, жаль что коммент длинный не сохранился... я ждала подробностей ;)

                    Александр, мне наоборот чтоб ссылки НЕ подчеркивались — чтоб сливались с основным текстом.

                    Ответить
                    • АлаичЪ

                      Чтобы ссылки не подчеркивались:

                      a, a:link, a:active, a:hover, a:visited {text-decoration:none;}

  12. Ольга (3 комм.)

    Спасибо огромное!!! Сделала всё по вашей "инструкции" — приятно избавляться от лишних плагинов сохраняя при этом функциональность. Буду почаще заглядывать, а то только "начинающая" веб-мастер. :-)

    Ответить
  13. Наталья (26 комм.)

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

    Есть вот такие строки: img {

    border:0px;

    padding:5px;

    max-width: 100%; /* not working in IE6*/

    }

    a {color:#000000;text-decoration: none;}

    a:hover {color: #7A5336;text-decoration: underline;}

    h1 {font-size:22px;}

    далее размеры заголовков, а больше с началом на "a" ничего и нет, может даже и не сюда надо?

    Строчку под a:hover {color: #7A5336;text-decoration: underline;}

    добавила как у вас a, a:link, a:active, a:hover, a:visited {text-decoration:none;}, но ничего не получилось, также пробовала попеременно вместо своих строк вставлять эту, тоже не вышло.

    А больше для линков (ссылок) Я НЕ ВИЖУ КУДА МОЖНО ВСТАВИТЬ ЕЕ?

    может у меня в шаблоне отсутсвует и надо прописать целый столбик с командами?

    Ответить
    • АлаичЪ

      Найдите у себя в style.css этот код:

      .entry a{

      text-decoration:underline;

      }

      Замените на:

      .entry a{

      text-decoration:none;

      }

      Ответить
  14. Наталья (26 комм.)

    Александр. Ну вообщем то получилось, но получилось фигово. С плагином номерки были красиво в квадратики обрамлены, а сейчас уродский набор цифр — это ж еще надо догадаться по ним клацнуть... :( Что делать? хочу квадратики и без плагина!

    Там еще в стиле из плагина вот так начинается: Default style for WP-PageNavi plugin

    Может в стиле надо менять? Но почему и что? Его же скопировала и полностью вставила, до этого было очень красиво.

    На всякий случай даю продолжение кода стиля: (ссылка там еще имеется ее не даю)

    .wp-pagenavi {
    	clear: both;
    }
     
    .wp-pagenavi a, .wp-pagenavi span {
    	text-decoration: none;
    	border: 1px solid #BFBFBF;
    	padding: 3px 5px;
    	margin: 2px;
    }
     
    .wp-pagenavi a:hover, .wp-pagenavi span.current {
    	border-color: #000;
    }
     
    .wp-pagenavi span.current {
    	font-weight: bold;
    }

    Надо в этом коде менять что то чтоб квадратиками с растоянием эти цифры страниц показывались?

    Я еще поэкспериментировала. Вернула обратно стили.ксс без стиля пагенави встроенного — такой же вид. Ничего не отпало и не поменялось. Странно.

    Ответить
    • АлаичЪ

      Как я и писал в посте — надо стили плагина pagenavi скопировать в свой основной style.css. Вот как раз этот код, что указали в комменте выше и надо вставить в style.css. Кеш почистить не забыть, и страницу сайта обновить, нажав несколько раз ctrl+f5.

      Ответить
      • Наталья (26 комм.)

        Александр, сегодня в браузере другом (гуглхром) обнаружила, что у меня оказывается очень симпатичная постраничная навигация — так как с плагином и была. Я вшоке от яндекс,интернет браузера. сколько дней прошло, кэш начищаю по 25 раз на день, компьютер перезагружала, а он все набор циферок показывает и еще сегодня пыталась шаблончик править — смотрю нефига не меняется. Думаю странно, пошла в гугл хром и там ужас увидела, а тот (яндекс,интернет) ничего не показывает — так и обнаружила что браузер показывает ерунду. :( Так что все отлично получилось по вашему коду и рецепту. А почему после всех чисток (включая СисиКлинер) браузер не обновляет морду не понимаю. Если не трудно посмотрите сами — у вас же есть адрес сайта — чтоб быть увереннее, что мне не показалось на этот раз. Спасибо!

        Ответить
        • АлаичЪ

          Да, все выглядит красиво и как надо :)

          Ответить
          • Наталья (26 комм.)

            Большое спасибо, Александр!

            Рекомендую Ваши записи своим друзьям :)

            Ответить
  15. Иван (1 комм.)

    Добрый день. Подскажите где здесь Плагин вставлять?

    <?php get_header (); ?>

    <div id="content" class="clearfix">

    <div id="main" class="col620 clearfix" role="main">

    <?php if ( have_posts () ) : ?>

    <header class="page-header">

    <h1 class="page-title">

    <?php

    if ( is_day () ) :

    printf ( __ ( 'Daily Archives: %s', 'online-marketer' ), '<span>' . get_the_date () . '</span>' );

    elseif ( is_month () ) :

    printf ( __ ( 'Monthly Archives: %s', 'online-marketer' ), '<span>' . get_the_date ( 'F Y' ) . '</span>' );

    elseif ( is_year () ) :

    printf ( __ ( 'Yearly Archives: %s', 'online-marketer' ), '<span>' . get_the_date ( 'Y' ) . '</span>' );

    else :

    _e ( 'Archives', 'online-marketer' );

    endif;

    ?>

    </h1>

    </header>

    <?php rewind_posts (); ?>

    <?php onlinemarketer_content_nav ( 'nav-above' ); ?>

    <?php /* Start the Loop */ ?>

    <?php while ( have_posts () ) : the_post (); ?>

    <?php get_template_part ( 'content', get_post_format () ); ?>

    <?php endwhile; ?>

    <?php onlinemarketer_content_nav ( 'nav-below' ); ?>

    <?php else : ?>

    <article id="post-0" class="post no-results not-found">

    <header class="entry-header">

    <h1 class="entry-title"><?php _e ( 'Nothing Found', 'online-marketer' ); ?></h1>

    </header><!-- .entry-header -->

    <div class="entry-content">

    <p><?php _e ( 'It seems we can&rsquo;t find what you&rsquo;re looking for. Perhaps searching can help.', 'online-marketer' ); ?></p>

    <?php get_search_form (); ?>

    </div><!-- .entry-content -->

    </article><!-- #post-0 -->

    <?php endif; ?>

    </div>

    <?php get_sidebar (); ?>

    </div>

    <?php get_footer (); ?>

    Ответить
    • АлаичЪ

      </article><!-- #post-0 -->

      <?php endif; ?>

      ***Например здесь***

      </div>

      <?php get_sidebar (); ?>

      Ответить
  16. Виталий (4 комм.)

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

    У меня вот какой вопрос. Если постраничная навигация выводилась не плагином WP-Pagenavi а плагином WP Page Numbers.

    В этом случаи мне надо сначала заменить плагин WP Page Numbers на WP-Pagenavi а потом выполнять все последующие действия?

    Спасибо!

    Ответить
    • АлаичЪ

      Незачем так сложно делать. Просто установи мой вариант, когда он заработает, снесешь свой WP Page Numbers и все окей будет :)

      Ответить
      • Виталий (4 комм.)

        Выложи в коменте стили с WP-Pagenavi пожалуйста.

        Ответить
        • АлаичЪ

          У меня их нет :) Скачай плагин WP-Pagenavi, открой файл со стилями и скопируй их оттуда.

          Ответить
  17. Сергей (1 комм.)

    Добрый день. А возможно ли сделать, чтобы выводилось число страниц не на новые посты, а на популярные? Популярные посты я вывожу без плагина — кодом на отдельной странице.

    в functions.php:

    # Displays a list of popular posts

    function sky_popular_posts ($num) {

    global $wpdb;

    $querystr = "SELECT $wpdb->posts.post_title, $wpdb->posts.comment_count, $wpdb->posts.ID FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'post' ORDER BY $wpdb->posts.comment_count DESC LIMIT $num";

    $popposts = $wpdb->get_results ($querystr, OBJECT);

    if (count ($popposts)>0) {

    $count = 0;

    foreach ($popposts as $post) {

    $count++;

    $class = 'item';

    if ($count==$num) $class = 'last';

    ?><li><a href="<?php echo get_permalink ($post->ID); ?>"><?php echo $post->post_title; ?></a></li><?php

    }

    }

    }

    на странице:

    <ul>

    <?php sky_popular_posts (1000); ?>

    </ul>

    То есть мне нужно, чтобы популярные посты выводились в виде ссылок по 100 штук на страницу

    Ответить
    • АлаичЪ

      Может и можно сделать то, что вам надо, но это не относится к данному посту. Так что я не знаю :(

      Ответить
  18. Yelena (1 комм.)

    Здравствуйте! У меня проблема в том, что постраничная навигации совсем не работает. 2,3 и др страницы открывая, выдает ошибку 404. Pagenavi активировала, но результатов не дает. В настройках постоянные ссылки /%postname%/. Как я поняла Ваши рекомендации по постраничной навигации, для тех случаев когда Pagenavi работает нормально. Для такого "тяжелого" случая как у меня вышеперечисленное решение расчитано?

    Ответить
    • АлаичЪ

      Да, по сути мои рекомендации относятся к сайтам у которых нормально работает Pagenavi.

      Что у вас за случай, сказать по комментарию невозможно, тут надо разбираться индивидуально.

      Ответить
  19. Сергей (1 комм.)

    Здравствуйте! Поставил Ваш код (всё по инструкции), но ничего не работает, а в explorer ещё и предупреждение появилось о том что на сайте обнаружен вредоносный код! Как-то сразу перехотелось дальше экспериментировать. После удаления кода — исчезло и предупреждение.

    Оставил плагин пока.

    Ответить
    • АлаичЪ

      Мой код никак не может быть как-то связан с какими-то вредоносными штуками.

      Ответить
  20. Михаил (3 комм.)

    Здравствуйте, скажите, пожалуйста, как исправить следующее:

    Если я нахожусь на первой странице сайта и нажимаю в навигации на последнюю страницу, то попадаю не на последнюю а на последняя-2, то есть например не на 15 страницу, а на 13.

    А если нахожусь на любой другой странице, кроме первой(главной), то последняя, является последней, а не пред, пред последней.

    Как это исправить? Пробовал разные функции, в том числе и ваш. Везде одно и тоже.

    Буду благодарен за ответ.

    И с прошедшими праздниками, вас.)

    Ответить
    • АлаичЪ

      Похоже, что дело тут не в кодах и плагинах, а в сайте где-то сбой. Если это было бы распространенной проблемой, то ее бы уже давно решили.

      Ответить
  21. Андрей (1 комм.)

    Не вышло, весь код вставленный в functions.php — тихо-мирно водрузился над шапкой блога и в самой админке...

    Что за косяк?

    Ответить
    • АлаичЪ

      Вставлять-то надо после <?php или <?, а не перед.

      Ответить
  22. Олег (1 комм.)

    АлаичЪ — респект и большое спасибо! Наконец то нормальный, не глючный, работающий код. Всех благ!

    Ответить
  23. Виталий (1 комм.)

    Вопрос не в тему поста.Подскажи как ты реализовал "вверх" с левой стороны?

    Ответить
  24. Простой (6 комм.)

    Здравствуйте. Может подскажите советом. Вопрос в следующем:

    И с плагином page navi и без него с этим кодом — построчная навигация работает без проблем.

    Но не работает она в обоих случаях только в архиве автора. То есть: сайт.ру/автор/имя автора/page/2 и так далее (page/3...page/5).

    Навигация выводится благодаря файлу loop.php и там заменял строки:

    <div id="nav-below" class="navigation">

    <div class="nav-previous"><?php next_posts_link ( __ ( '<span class="meta-nav"></span> ', 'slidingdoor' ) ); ?></div>

    <div class="nav-next"><?php previous_posts_link ( __ ( ' <span class="meta-nav"></span>', 'slidingdoor' ) ); ?></div>

    </div><!-- #nav-below -->

    Соответственно на строки плагина: <?php wp_pagenavi (); ?>

    Или когда делал без плагина, то заменял на: <?php if (function_exists ('kama_pagenavi')) kama_pagenavi (); ?>

    Всё прекрасно работает. Только в архиве автора нет. Когда переходишь на страница 2 (или любую другую), то выдаёт: такой страницы нет.

    Если можно, то выскажите пару мыслей, где мне копать, чтобы исправить это?

    Ответить
    • АлаичЪ

      Честно, даже предположить не могу. Страницами автора никогда не пользовался. А может быть это не в навигации дело, а в движке где-то баг закрался?

      Ответить
      • Простой (6 комм.)

        Если напишите — как искать баги в движке, то почитаем )). А так понять, где там баг или нет невозможно.

        Ответить
        • АлаичЪ

          Самый простой вариант — установить чистую версию движка на локальный хост и проверить работает или нет. Разумеется, надо ставить такую же версию, как и та, что на рабочем сайте. Если на локалке не работает — значит баг текущей версии движка. Если работает — значит что-то в файлах на сервере накосячили. Можно, например, перезалить файлы на сервере файлами из чистого дистрибутива. Если и это не помогает — отключить все плагины.

          В общем — какого-то пошагового алгоритма поиска багов не существует, приходится всегда импровизировать.

          Ответить
          • Простой (6 комм.)

            Спасибо за советы.

            Ответить
  25. 4idroid (1 комм.)

    Спасибо, все получилось. У меня вопрос — оранжевые кнопки соц. сетей под статьей плагин? И если да, можно название. Спасибо.

    Ответить
    • АлаичЪ

      Нет, оранжевые кнопки — это хенд-мейд чистой воды :)

      Ответить
  26. Илья (1 комм.)

    У меня вопрос, как сделать так, чтобы выводилось не 10 статей на главной странице, а скажем 5. Нигде в настройках скрипта не могу это найти.

    Ответить
    • АлаичЪ

      Настройки -> Чтение (или site.ru/wp-admin/options-reading.php).

      Ответить
  27. Александр (1 комм.)

    Здравствуйте, тезка.

    Подобный вопрос наверное уже задавал тов. "Простой".

    Попытаюсь изложить.

    Сразу напишу, что данный снипет заработал на главной странице (index.php).

    Но задача привязать постраничную навигацию к кастомному шаблону страницы

    с кастомными типами постов.

    Взят за основу loop-page.php:

    <?php if ( have_posts () ) while ( have_posts () ) : the_post (); ?>

    ...

    <?php if (is_page ('post_type_1'))

    $args = array (

    ...

    elseif (is_page ('post_type_2')) $args = array (

    ...

    ?>

    <?php $loop = new WP_query ($args);

    <?php if ($loop->have_posts ()) { //Вывод постов по порядку.?>

    <?php while ( $loop->have_posts () ) : $loop->the_post (); ?>

    ...

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

    После последней строки должна появиться навигация, но увы.

    Нужно копать глубже.

    Новые типы постов создал при помощи планига Easy Post Types.

    Спасибо за вашь труд.

    Ответить
  28. Marazm (1 комм.)

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

    Столкнулся с такой проблемой. На главной странице навигация работает, переключает на следующие страницы, а вот на страницах категории выдает ошибку 404

    Вод код category.php:

    <?php get_header(); ?>
    <div id="content">
    <h1 class="rubrik"><?php printf(single_cat_title( '', false )); 	?></h1>
    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    <article class="section_c">
    <div class="section_text">
    <?php if ( has_post_thumbnail()) { ?>
    <a rel="nofollow" href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" ><?php the_post_thumbnail(array(150,150), array('class' => 'thumbnail')); ?></a>
    <?php } ?>
    <span class="section_title"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></span>
    <div class="entry">
    <!--noindex--><?php the_excerpt(); ?><!--/noindex-->
    </div>
    </div>
    </article>
    <?php endwhile; ?>
     
    <?php if (function_exists('kama_pagenavi')) kama_pagenavi(); ?>
     
    <?php endif; ?>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>
    Ответить
  29. fortress-design (1 комм.)

    Пришлось помучаться, но я уже знаю решение этой проблемы. Нужно установить другой плагин: http://www.fortress-design.com/konflikt-wp-pagenavi-i-seo-without-category/

    Ответить
  30. Андрей (1 комм.)

    Добрый день. Существует тема для Вордпресс — Parabola. У нее большие проблемы с навигацией и с системными файлами. Сама тема многофункциональна и есть большой выбор настроек. При выборе главной странице сайта (frontpage) — в качестве страницы презентаций со всякими слайдерами и т.п., настройка подразумевает вывод определенного количества статей (от 10 — ...) без навигации.

    С помощью не хитрых манипуляций и плагина pagenavi, у меня получилось добавить навигационное меню, НО. при включении второй страницы навигации page2 у меня появляется то же, что и на первой — главной странице.

    Попробовал добавить Ваш код в файл функции — идет какой-то конфликт. Видимо нужно найти другой файл темы Paradola, отвечающий за эти функции.

    Не могли бы вы помочь?

    Ответить
    • Андрей (1 комм.)

      Присоединяюсь к вопросу!

      Такая же ерунда на теме Parabola происходит с плагином pagenavi. Как бы его подкрутить под эту тему, или её под плагин?

      Ответить
  31. Александр (1 комм.)

    Добрый День!

    Есть проблема с вашим кодом?

    Установил все по инструкции, лог на хосте пишет ошибки в этих строках:

    $posts_per_page = (int) $wp_query->query_vars[posts_per_page];

    $paged = (int) $wp_query->query_vars[paged];

    часть лога на хосте

    [Sat Dec 06 13:06:23 201] [error] [client 207.46.13.111] PHP Notice: Use of undefined constant posts_per_page — assumed 'posts_per_page' in /home/srv52262/ site.ru/wp-content/themes/NicePen/functions.php on line 19

    [Sat Dec 06 13:06:23 201] [error] [client 207.46.13.111] PHP Notice: Use of undefined constant paged — assumed 'paged' in /home/srv52262/site.ru/wp-content/themes/NicePen/functions.php on line 20

    Подскажите как поправить, очень понравилась ваша навигация.

    Если не трудно ответьте на почту.

    Ответить
  32. Сергей (1 комм.)

    Здравствуйте! Вот мой файл functions.php, куда вставлять код? Куда бы не вставил, сайт закрывается (белый фон).

    <?php

    ...

    Есть еще один похожий файл, theme-functions.php

    Тема моего блога — "Graphene"

    Ответить
    • АлаичЪ

      Вставляйте сразу после первой строки <?php

      Ответить
  33. Виктор (1 комм.)

    Добрый день. Стоит такая задача, ломаю голову который день. Готов даже заплатить за помощь в создании этой функции.

    Вот пример: http://pyz.am/omg/bindi-irwin-named-one-australias-sexiest-women/

    Описываю, что нужно. — Сделать такую же пагинацию в постах.

    Но там есть одна хитринка. Когда ты находишься на последней странице, нужно чтобы кнопка "дальше" оставалась но уже перебрасывала на предыдущую статью. То есть по сути бесконечная пагинация.

    И как убирать лишние кнопки из пагинации? например страницы, кнопку назад и т.д.

    Буду очень благодарен за помощь.

    Заранее спасибо.

    Ответить
Оставь комментарий или спроси через Twitter →

· Малоинформативные комментарии или комментарии, не содержащие вопрос, удаляются.
· В поле URL оставляйте ссылку только на свой сайт/блог. Эта ссылка для админа, посетители ее не увидят.
· Любой html-код отображается в виде текста, любые ссылки неактивны.
· Для спаммеров - БЛОГ НЕ DOFOLLOW!!!