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

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

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

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

    Т.е. необходимость в использовании плагина отпадает, и, как следствие, количество запросов к БД будет уменьшено.

    WP-PageNavi не делает запросов к базе. Другие плагины могут делать один лёгкий запрос, возвращающий общее количество записей.

  2. 3

    Стандартно все опции кэшируются, поэтому получение эквивалентно обращению к обычной php-переменной. Просто плагином удобней работать и он не зависит от шаблона.

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

  3. 7

    Дим, не разбирался еще с данной пагинацией, так как нет времени.
    Недавно добавил в закладки http://www.smashingmagazine.com/2011/05/10/new-wordpress-power-tips-for-template-developers-and-consultants/
    У тебя оттуда код?

  4. 9

    Ох ты, как раз во время. Начал с утра шаблон дорабатывать, смотрю — новая статья! Спасибо, сейчас попробуем!

  5. 10

    Спасибо большое! Давно искал подобное решение, т.к. не всегда тема поддерживает нужные плагины. Подскажите пожалуйста, как сделать редирект с первой страницы (адрес сайта/page/1) на главную?

  6. 12

    Странно, что разработчики WordPress до сих не обернули это в стандартную функцию и включили в состав движка

  7. 17

    пользуюсь функцией от Попова. надо попробовать вашу. спасибо за статью.

  8. 18
    Sinvarg

    Сразу добавлю «5 копеек» для тех, кто будет работать с мультиязычностию или будет делать темы для локализации (сам сталкивался неоднократно):
    Если понадобится, в вышеприведенном коде строку 18 заменяем (точнее, дополняем) на

    if ($total == 1 && $max > 1) $pages = '<span class="pages">' . (__('Page', 'blank')) . ' ' . $current . ' ' . (__('of', 'blank')) . ' ' . $max . '</span>'."rn";
    

    ‘blank’, само собой, меняем на свой text domain

  9. 19

    А где CSS скрипт, всё сделал как написано но дизайна не вижу… нехватает CSS скрипта.

  10. 21
    Дмитрий

    Добрый день. Пробовал и этот метод, и с pagenavi, но не могу решить следующую проблему:

    Шаблон: page.php
    Вызов идет так:

    if (have_posts()) : while (have_posts()) : the_post();
    ---------
    $wplover_home = new WP_Query("post_type=page&post_parent=$post_parent");
    if ($wplover_home->have_posts()) : while ($wplover_home->have_posts()) :
    $wplover_home->the_post();
    ---------
    endwhile;
    if(function_exists('wp_pagenavi')) { wp_pagenavi( array( 'query' =>$wplover_home )); }
    ---------
    endwhile;

    Собственно так. Суть такова — идет вывод страницы, а под ней вывод всех ее «братьев и сестер». Может ли не работать пагинация из-за вложенности циклов?

    Спасибо.

  11. 24

    Спасибо большое за помощь, все работает. Сейчас буду разбираться что есть что.
    Свежая и актуальная статья получилась :)

  12. 25
    maxoud

    Наличие постраничной навигации говорит об отсутствии или ущербности категоризации сайта. Не используется потенциал внутренних ссылок и теряется значительная часть НЧ. Поверьте.

  13. 28

    А можно CSS хоть в каком нибуть варианте а там я уже сам переделаю как мне нужно, please ??!?!?!

  14. 29
    Кирилл

    Спасибо за функцию. Как раз думал про этот функционал. Будет чем заняться на выходных )

  15. 30

    У меня два вопроса:
    1) Почему Вы ссылаетесь называя «другим аналогичным решением» на какой-то левый материал. И автор Kama, выше — тоже туда же направляет. Какая-то подстава.
    2) Что это за вопрос в коде ? user_trailingslashit

  16. 38
    flex74

    Отличное решение для вордпресс. Для меня как для разработчика своих сайтов интересен вопрос, а можно ли такую навигацию применить не на ворд пресс а в любой CMS

  17. 40
    san4izl

    Скрипт поломал кодировку. Как исправить проблему? Кодировал в UTF-8 без BOM.

  18. 42

    За материл спасибо. Долго он прятался от наших глаз) версия 2.1) Попробую реализовать у себя, посмотрим что будет с нагрузкой и что получиться в итоге.
    О результатах отпишусь.

  19. 43
    muskull

    как вы оформили эти комментарии?
    как организовать нумерацию комментов?
    и как сама форма сделана так что есть так сказать визуальный редактор и можно код вставлять?

    • 44

      как вы оформили эти комментарии?

      C помощью CSS.

      как организовать нумерацию комментов?

      Такой информации полно в Интернете, пользуйтесь поисковиками.

      и как сама форма сделана так что есть так сказать визуальный редактор и можно код вставлять?

      Специально для вас в этом редакторе есть кнопка со знаком вопроса.

  20. 45
    muskull

    Специально для вас в этом редакторе есть кнопка со знаком вопроса.

    я имел ввиду не предосмотр, а вот эти кнопки: code, tt, b-quote, link, i , b

  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/
    или сделать редирикт, но тут сами решайте.

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

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