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

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

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

Полезные комментарии (1)
Комментарии (215)
  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/
    или сделать редирикт, но тут сами решайте.

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

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