Главная WordPress

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

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

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

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

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

Функция, которую я вам предлагаю, совсем небольшая по размеру:

function wp_corenavi() {
  global $wp_query;
  $total = isset( $wp_query->max_num_pages ) ? $wp_query->max_num_pages : 1;
  $a['total'] = $total;
  $a['mid_size'] = 3; // сколько ссылок показывать слева и справа от текущей
  $a['end_size'] = 1; // сколько ссылок показывать в начале и в конце
  $a['prev_text'] = '«'; // текст ссылки "Предыдущая страница"
  $a['next_text'] = '»'; // текст ссылки "Следующая страница"

  if ( $total > 1 ) echo '<nav class="pagination">';
  echo paginate_links( $a );
  if ( $total > 1 ) echo '</nav>';
}

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

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

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

В HTML-коде, который получается в результате вывода функции, присутствуют все необходимые CSS-классы, которые можно использовать для оформления любого элемента навигации (например, текущую страницу, ссылки на предыдущую и следующую страницы).

Пользуйтесь.

* * *

Если вам нужен надежный хостинг и регистрация доменов, то вас ждет крупнейших украинский хостинг-провайдер FREEhost.UA, который готов предложить любой вид хостинга, начиная от виртуального, заканчивая арендой готового сервера.

Комментарии (228)

  1. Большое спасибо автору. Успехов!

  2. не читал все комментарии, а что делает строка
    $a['base'] = str_replace (999 999 999, '%#%', get_pagenum_link (999 999 999));
    ?

    • Что-то связанное с получением правильных ссылок. Точно не знаю.

      • Значит я близко к решению проблемы, у меня на всём сайте пагинация работает корректно, а вот на заданной пользователем отдельной таксономии вместо «/page/2» выводится «/2», в следствие чего на ссылку первой пагинации не удаётся перейти
        Буду бороть, но всё равно спасибо! :-)

  3. а как обернуть ссылки в li?

  4. немогу понять как сделать чтоб на главной выбивалось всего 4 статьи остальное уходило в пагинацию

  5. У меня вместо цифр стоит «следующая страница» а нельзя ли это поменять в настройках ВП, не влезая в файлы шаблона?

  6. Спасибо за статью! Добавил постраничную навигацию на свой сайт techbez01.ru без плагина. Круто!

  7. Добрый день! Код замечательный, много раз меня выручал. Но, попытка использовать его для вывода пагинации для кастомных типов записей не увенчалась успехом. Подскажите можно ли его адаптировать для использования на страницах с кастом пост тайпами.

    • Функция должна работать с любыми типами записей. У меня с этим проблем не было.

    • Сделал вот-так

      function pagination($wp_query=null) { // функция вывода пагинации
      		if (!is_object($wp_query)) {
                  global $wp_query; // используем глобальную выборку если не передана пользовательская
              }

      Теперь в функцию можно передать объект пользовательской выборки для кастомных страниц. Пагинация правильно расчитывается и выводится, но есть проблема: при переходе по разным страницам пагинации всегда отображаются записи первой страницы.
      Если у кого-то есть мысли как это победить — буду крайне благодарен

  8. Проблему решил: при создании своего объекта WP_Query в его аргументах обязательно добавляем
    'paged' => get_query_var ('paged') ?: 1
    Все вместе у меня выглядит так:

    $args = [   'post_type' => 'post',
                            'post_status' => 'publish',
                            'paged' => get_query_var('paged') ?: 1,];//разбивает запрос постранично
                $query = new WP_Query($args);
    
    //потом цикл вывода поста
    
    pagination($query); //вызываем функцию пагинации
    

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