пагинация-wp

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

Nikel, 25.12.2014

Старый способ — использование функции paginate_links

На самом деле в Wordpess давно уже  присутствуют некие  средства  для  создания пагинации. Я  имею в виду   paginate_links(), появившуюся еще в WordPress 2.1, о чем, кстати, многие вообще не знали, используя плагины. С помощью этой функции вполне возможно сделать навигацию, правда кода получится не одна строчка, иногда это довольно сложный код. Если представить простой вариант, получится что-то подобное

paginate_links принимает в примере массив из параметров

  • base — строка для замены по формату. get_pagenum_link содержит url на соответствующую страницу пагинации, $big заменяется на строку формата '%#%'
  • current — номер текущей страницы пагинации, который возвращается с помощью ф-ции get_query_var('paged')
  • total — общее количество страниц пагинации, для его определения используется свойство max_num_pages объекта  $wp_query

Кроме того, нужно избавиться от лишней части '/page/1', появляющейся в конце адресной строки первой страницы, см. строчку 7 примера.

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

Новый способ — функция the_posts_pagination

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

Параметры, которые принимает the_posts_pagination()

show_all
Вывод полностью всех страниц. По умолчанию отключен (равен false).
prev_next
Предыдущая-Следующая. По умолчанию включен (true).
end_size
Количество страниц, которое отображается в начале и конце списка страниц. По умолчанию 1.
mid_size
Количество страниц, отображающихся слева  и справа от текущей. По умолчанию 1.
before_page_number
Произвольный текст или символ перед  номером каждой страницы. По умолчанию отсутствует.
after_page_number
Произвольный текст или символ после номера каждой страницы. По умолчанию отсутствует.
prev_text
Текст ссылки на предыдущую страницу.
next_text
Текст ссылки на следующую страницу
screen_reader_text
Параметр, содержащий информацию для устройств чтения с экрана (скринридеров), предназначенных для пользователей с ослабленным зрением. Для визуальных браузеров обычно задаются стили, скрывающие этот текст.

Не обязательно перечислять все параметры в скобках функции. Указываем выборочно те, которые представляют интерес или не указываем ничего — в этом случае  будут выводиться параметры по умолчанию.  Помещаем код с  the_posts_pagination в файл index.php темы WordPress после цикла, не забывая заключить в дескрипторы <?php ?>.

пагинация

Так выглядит стандартная навигация нового шаблона Twenty Fifteen (появившегося в версии 4.1.), созданная при помощи этой функции.

navigation

Классы, отвечающие за настройку внешнего вида

Функция генерирует html код, добавив к которому соответствующие стили, можно получить пользовательскую постраничную навигацию.

Итак, мы располагаем несколькими классами, для которых требуется создать правила в файле  style.css  темы WordPress.

  • nav.pagination — тег-обертка пагинации. Используется новый тег html5, созданный специально для навигации.
  • div.nav-links — класс блочного элемента, содержащего непосредственно всю совокупность ссылок на страницы
  • .page-numbers — класс для настройки отображения номеров со страницами
  • span.current — строчный элемент содержащий номер текущей страницы
  • a.prev — ссылка на предыдущую страницу
  • a.next — ссылка на следующую страницу

навигация

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

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

Помимо пагинации (разбиению на страницы) рекомендую вам также использовать альтернативный вид навигации  — хлебные крошки, например реализованный с помощью плагина Prime Strategy Bread Crumb.

11 комментариев


    • Suzanna
      Cancel Replay
    • Май 23, 2015

    Спасибо за статью. А как можно убрать или написать что-то другое в место Назад и Далее, html код отвечающий за это я не нашла .

      • Nikel
        Cancel Replay
      • Май 23, 2015

      За это отвечают параметры prev_text и next_text в кавычках вместо предыдущий и следующий пишете свой текст the_posts_pagination( array( 'prev_text' => 'предыдущий', 'next_text' => 'следующий', ) );

        • Suzanna
          Cancel Replay
        • Май 24, 2015

        Спасибо за ответ.Если например twentyfourteen_paging_nav() функция пагинации, пишу внем 'prev_text' свой текст- не работает , в functions.php не нашла эту функцию. the_posts_pagination так тоже выводит страницы, но стили надо прописать снова. Наверное так и сделаю.

          • Nikel
            Cancel Replay
          • Май 24, 2015

          Ну, twentyfourteen_paging_nav() специфическая ф-ция темы twentyfourteen, она определяется в файле template-tags.php (themes/twentyfourteen/inc/template-tags.php), если в этом файле исправить prev_text все работает

            • Suzanna
              Cancel Replay
            • Май 25, 2015

            themes/twentyfourteen/inc/template-tags.php нет ни слово на русском, у меня сайт будет на другом языке, поэтому мне надо все слова (например- добавить комментарии) написать на этом языке. Редактирую ru_RU.po этой темы, но ничего не меняется. Вопрос конечно же не по этой теме, но может Вы знаете как это реализовать. Спасибо !

            • Nikel
              Cancel Replay
            • Май 28, 2015

            Если для вас это все еще актуально. Кроме файла po должен еще изменяться и файл c расширением mo, переведенные строки читаются из этого файла. Поэтому редактировать можно, например, с помощью программы Poedit, так как она заменяет при сохранении и файл .mo на обновленный. Может в этом была причина?

    • Сергей
      Cancel Replay
    • Июль 8, 2015

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

    • Сергей
      Cancel Replay
    • Июль 18, 2015

    Подскажи, как вообще удалить 'prev_text' => 'предыдущий', 'next_text' => 'следующий',

    • Виктория
      Cancel Replay
    • Сентябрь 16, 2015

    Добрый день. Подскажите, как убрать строку "Навигация по записям"? Она у меня отображается на экране вместе с навигацией.

    • Dan
      Cancel Replay
    • Июнь 8, 2016

    Вопрос такой, у меня не работает постраничная навигация новостей, когда щелкает на след. страницу, не страница не переходит на след. , а исчезает одна новость, вот мой args, может какай-то ошибка? $args = array( 'paged' => $paged, 'numberposts' => 14, 'offset' => 0, 'orderby' => 'post_date', 'order' => 'DESC', 'post_type' => 'post', 'offset' => $paged, 'cat' => '3', 'post_status' => 'publish', 'suppress_filters' => false );

    • Андрей
      Cancel Replay
    • Декабрь 5, 2016

    А есть ли способ убрать отображение последней страницы и три точки, когда у нас их много? "1 2 3 4 5 далее" , вместо "1 2 3 ... 87 далее"