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

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

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

Полезные комментарии (1)
Комментарии (211)
  1. 1
    makar1711

    Установил все работает. Спасибо.Но есть вопросы:
    1 Как увеличить размер (Страница 1 из 65 1 2 3 4 … 65 »)? У меня мелко отображается.
    2 Почему показывает больше страниц чем на самом деле? Например из реально существующих 17 страниц — отображает 65 страниц.

  2. 5
    Виктор

    Привет. Для начала, спасибо за удобное решение, часто ним пользуюсь.

    Но есть ситуация когда нельзя использовать этот метод.
    Если включен ЧПУ, то при переходе на след страницу в конце УРЛ добавляется «page/2» например.
    Проблема возникает когда я использую в урл свои переменные.
    Тогда при переходе на другую страницу получается урл site.ru?key=1/page/2/
    а нужно site.ru/page/2/?key=1
    Подскажите, пожалуйста, можно это как-то решить?

  3. 8

    Спасибо за код…всё работает прекрасно…в связи с этим, добавлю и свой вопрос (Тимуру задал-не дождался ответа)…а можно как нибудь «прикрутить» данный код или можно другой, если есть конечно…, к скучному и однообразному оформлению стандартной функции в Вордпресс разбиения больших форматов записей — nextpage ?

  4. 12
    Sammi

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

  5. 14
    Одетте

    Помогите решить проблему. Пагинация стоит вашим способом, после обновления вп, все стало работать не правильно. Замечено было не сразу поэтому теперь понять не могу как сделать чтобы работало.
    ЧПУ. сайт с рецептами.

    ссылка на статью например
    pirogblog(.)com/recepti/keksyi-aristokrat

    При пагинации выдает ошибку 404 открывая ссылки такого вида

    pirogblog(.)com/recepti/page/3 начинает работать если вручную прописать в адрес category, как в примере с тэгами ниже.

    Хотя пагинация в тэгах работает корректно и слово тэг не теряется и при пагинации ссылка остается как надо.

    pirogblog(.)com/tag/vtoryie-blyuda/page/3

    Надеюсь понятно объяснил)

    То есть для отдельных статей category не нужна и в ссылке она не присутствует, а в пагинации на оборот должна быть, иначе 404

  6. 16
    Простой

    Вопрос:
    А почему в архиве автора не работает?
    То есть сайт.ру/author/его имя/

  7. 18

    Приветствую! Спасибо за код, все работает, все показывает.
    Возник вопрос, погуглил не нашел, а можно сделать кнопку «показать все», по нажатию на которую, будут все страницы сразу отображаться? Заранее спасибо.

  8. 21

    А как такое же и для комментариев сделать?

  9. 23
    Артур

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

  10. 26

    Не подскажите — почему в метках не работает навигация? Выдаёт, что страница не найдена при переходе на вторую и так далее.

  11. 27
    WPixel

    Дим как подправить функцию чтоб HTML код принял такую конструкцию ?

    <a href="#" rel="nofollow">&laquo;</a>
    <a href="#" rel="nofollow">1</a>
    <a href="#" rel="nofollow">2</a>
    <a href="#" rel="nofollow">3</a>
    <a href="#" rel="nofollow">4</a>
    <a href="#" rel="nofollow">5</a>
    <a href="#" rel="nofollow">&raquo;</a>


    это навигация от Bootstrap

    • 28

      Никак, исходный код вшит в движке.

      • 29
        WPixel

        Исходный код да, но вот эта часть
        echo $pages . paginate_links($a)
        если переписать аргумент
        '%_%'
        ,'format' => '?page=%#%'
        ,'total' => 1
        ,'current' => 0
        ,'show_all' => False
        ,'end_size' => 1
        ,'mid_size' => 2
        ,'prev_next' => True
        ,'prev_text' => __('« Previous')
        ,'next_text' => __('Next »')
        ,'type' => 'plain'
        ,'add_args' => False
        ,'add_fragment' => ''
        );

        echo paginate_links( $args );
        ?>

        type (строка)
        Формат возвращаемых данных.

        plain — строка ссылок разделенная пробелами. По умолчанию;
        array — массив данных (для дальнейшей обработки);
        list — html список .
        хотелось бы приладить list — html список разве это не реально? просто не приложу ума куда это поправить.

    • 30

      Все ссылки на другие страницы у Вас будут иметь конструкцию с содержанием или /page или ?page= (в зависимости от настроек ЧПУ)
      Пропишите в роботс.тхт чтобы страницы с такими урл не индексировались.
      Результат тот-же

  12. 31

    Вот уже второй час пытаюсь установить эту навигацию у себя на сайте, пока тщетно…

  13. 32
    Михаил

    Привет, Дмитрий.
    Твоими наработками уже давно пользуюсь.
    В том числе и данной альтернативой pagenavi.
    Заметил недавно одну интересную особенность, которая есть в pagenavi и которую хотелось бы реализовать.
    В твоей версии ссылка на первую страницу рубрики (если мы находимся на второй) выглядит так: http://dimox.name/category/wordpress/page/1/
    У тебя она сразу редиректится на /category/wordpress/, у меня почему-то нет. Но не в этом суть.
    Можно доработать твою функцию, чтобы ссылка на первую страницу была без /page/1?

  14. 34

    В общем у всех, кто использует код из данной статьи, одна беда:
    Вариант 1: сайт.ру/category/категория/page/2 — работает
    Вариант 2: сайт.ру/категория/page/2 — не работает (но сюда ссылается)

    И че делать все хз как я погляжу…
    Ладно, копируем все что я ниже написал…

    //Удаляем category из УРЛа категорий
    add_filter('category_link', create_function('$a', 'return str_replace("category/", "", $a);'), 9999);
    
    add_filter('user_trailingslashit', 'remcat_function');
    function remcat_function($link) {
    	return str_replace("/category/", "/", $link);
    }
    add_action('init', 'remcat_flush_rules');
    function remcat_flush_rules() {
    	global $wp_rewrite;
    	$wp_rewrite->flush_rules();
    }
    add_filter('generate_rewrite_rules', 'remcat_rewrite');
    function remcat_rewrite($wp_rewrite) {
    	$new_rules = array('(.+)/page/(.+)/?' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&amp;paged='.$wp_rewrite->preg_index(2));
    	$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }

    И добавляем этот код в functions.php
    Тогда у вас будет работать и первый и второй варианты. Ну что тоже не очень хорошо. Можно в robots.txt закрыть /category/
    или сделать редирикт, но тут сами решайте.

    Автор, обнови пост.

  15. 35
    Сергей

    Здравствуйте.
    А вот есть еще одна беда.
    Когда нажимаешь допустим на 6 страницу из 8 мной поставленных в $a['mid_size'] начинает отображатся 12 страниц…

  16. 41

    Благодарю! Причем за многие посты. Долой плагины))

  17. 42

    а можно ли убрать «страница N из NN», чтобы были просто числа? Такого типа «1,2,3…5…10 >>»

  18. 44
    Лисенок

    Здравствуйте! Спасибо за страничную навигацию, пригодилась!!! Я новичок, делаю сайт без шаблона WordPress, кодировать учусь сама. Столкнулась с проблемой перехода статей со страницы на страницу. Стала в ступор , не знаю как это решается. Допустим, на главной странице превью 10 статей, на 2й стр. их только 2. Пишу еще 1 статью и хочу, чтобы новая осталась на главной странице, а на 2й странице было уже 3 статьи. Возможно ли как-то это реализовать не перенося превью статьи в ручную? Посоветуйте пожалуйста, как правильно привязать статьи к страницам. Очень надеюсь на вашу подсказку!

  19. 46
    Лисенок

    Спасибо, обращусь туда. А как вы вобщем думаете, это с помощью плагина делается, или CSS, или JavaScript или того и другого вместе?

  20. 49
    Лисенок

    Значит точно в HTML ничего придумать нельзя? (Я в нем больше соображаю)

    • 50
      Павел

      Ну раз вы не знаете PHP, вы это не сделаете. Нужно разбираться с WP_Query и шаблонами страниц к примеру. Может быть 2 страницы с двумя шаблонами, на одной будет получаться по 10 постов, на другой по 3, или там как вам угодно, 10 постов из одной категории, на другой 3 их другой.

      Я вот не понял зачем вообще тут к $wp_rewrite привязываться, в шаблоне можно проверить номер текуЩей страницы + количество постов общее + сколько всего на странице в опциях указано и считать. Видно я про что-то забыл.

    • 51
      Павел

      HTML тут не при чем. Можете цветочки полить, может по страницам само разобьется все с таким же успехом ) Нууу конечно можно всегда выводить все посты, и магию какую-то сделать с JS и HTML чудесную.

  1. 1

    В общем у всех, кто использует код из данной статьи, одна беда:
    Вариант 1: сайт.ру/category/категория/page/2 — работает
    Вариант 2: сайт.ру/категория/page/2 — не работает (но сюда ссылается)

    И че делать все хз как я погляжу…
    Ладно, копируем все что я ниже написал…

    //Удаляем category из УРЛа категорий
    add_filter('category_link', create_function('$a', 'return str_replace("category/", "", $a);'), 9999);
    
    add_filter('user_trailingslashit', 'remcat_function');
    function remcat_function($link) {
    	return str_replace("/category/", "/", $link);
    }
    add_action('init', 'remcat_flush_rules');
    function remcat_flush_rules() {
    	global $wp_rewrite;
    	$wp_rewrite->flush_rules();
    }
    add_filter('generate_rewrite_rules', 'remcat_rewrite');
    function remcat_rewrite($wp_rewrite) {
    	$new_rules = array('(.+)/page/(.+)/?' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&amp;paged='.$wp_rewrite->preg_index(2));
    	$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }

    И добавляем этот код в functions.php
    Тогда у вас будет работать и первый и второй варианты. Ну что тоже не очень хорошо. Можно в robots.txt закрыть /category/
    или сделать редирикт, но тут сами решайте.

    Автор, обнови пост.

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