Пагинация на блоге WordPress без плагина

пагинация

Вот и на моём блоге появилась первая страница пагинации. Отмечу сразу, что в сети довольно таки много различных плагинов с помощью которых можно реализовать пагинационное меню на блоге, но воспользовался я стандартной функцией, появившейся в версии WordPress 4.1:

<?php the_posts_pagination(); ?>

Прекрасная возможность избавиться от ещё одного плагина и снизить нагрузку на и без того тяжелый движок WordPress.

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

Стандартные параметры в файле /wp-includes/link-template.php:

$args = array(
  'show_all' => False, // показаны все страницы участвующие в пагинации
  'end_size' => 1,     // количество страниц на концах
  'mid_size' => 1,     // количество страниц вокруг текущей
  'prev_next' => True,  // выводить ли боковые ссылки «предыдущая/следующая страница».
  'prev_text' => __('« Previous'),
  'next_text' => __('Next »'),
  'add_args' => False,
  'add_fragment' => 'текст',     // Текст который добавиться ко всем ссылкам.
  'screen_reader_text' => __( 'Posts navigation' ),
);

Изменение стандартных параметров с помощью функции <?php the_posts_pagination(); ?>:

<?php the_posts_pagination( array(
  'mid_size' => 2,
  'end_size' => 2,
  'prev_text'    => __('«'),
  'next_text'    => __('»'),
) );
?>

где:

'mid_size' => 2, — количество страниц до и после просматриваемой
'end_size' => 2, — количество страниц до и после «точек»
'prev_text'    => __('«'), — анкор ссылки на предыдущую страницу
'next_text'    => __('»'), — анкор ссылки на последующую страницу

параметры функции пагинации

Данный код вставляется в место вывода пагинации, в моём случае wp-content/themes/marseo/loop.php

Данная функция выводит в html:

<nav class="navigation pagination" role="navigation">
<h2 class="screen-reader-text">Навигация по записям</h2>
<div class="nav-links"><span class="page-numbers current">1</span>
<a class="page-numbers" href="https://marseo.ru/sozdanie-sajta-na-wordpress/page/2/">2</a>
<a class="next page-numbers" href="https://marseo.ru/sozdanie-sajta-na-wordpress/page/2/">»</a></div>
</nav></div>

Где <h2> заголовок может быть зарезан через файлы движка wp-includes/link-template.php:

как убрать <h2> в пагинации

Либо через регулярку:

$nav = get_the_posts_pagination();
$nav = preg_replace('~<h2.*?h2>~', '', $nav);
echo $nav;

Очень часто авторы блогов закрывают от индексации страницы пагинации и скрывает ссылки с нумерацией атрибутом rel="nofollow".

Через движок wp-includes/general-template.php:

добавить rel="nofollow" к ссылкам в пагинации

Через регулярку:

$pag = get_the_posts_pagination();
$pag = str_replace('<a ', '<a rel="nofollow"', $pag);
echo $pag;

Тем же, кто не закрывает страницы пагинации для индексации и использует их для передачи  внутреннего ссылочного веса, функция, которая уникализирует title каждой страницы навигации:

<?php
if ( $paged >= 2 || $page >= 2 )
echo ' | ' . sprintf( __( 'Страница %s', 'striped' ), max( $paged, $page ) );
?>

Данную функцию необходимо добавить в файл header.php перед </title>

Следует ли закрывать страницы пагинации от индексации

Мнение автора:

В следствие того, что даже Яндекс теперь отображает в вебмастере ссылки с nofollow, смею предложить, что некоторый вес даже по закрытым ссылкам передаётся страницам. Тем самым страницы пагинации имеют хоть небольшую, но всё же значимость, которую могут передать статьям находящимся в разделах с пагинацией. Вес страниц пагинации собирается из количества ссылок, при предложенной мной функции:

  • первая и последняя страница могут иметь довольно большое количество внутренних ссылок (зависит от количества страниц пагинации в разделе)
  • любая другая страница:

    2 ссылки при 'mid_size' => 2;
    4 ссылки при 'mid_size' => 3;
    и так далее.

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

С уважением,
  1. Александр

    Доброго времени суток, подскажите пожалуйста, ecть страница archive-article, на ней пагинацыя норм работает, есть страница single-article, то что single это вывод конкретного поста я понимаю, но если в нем хочу вывести список дочерних постов, можно ли на нем реализовать пагинацыю!? Она отображается но переходить по ссылкам не переходит!

    Ответить
    • Максим

      А много постов? Может через get_posts проще будет вывести?

      Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *