Вот и на моём блоге появилась первая страница пагинации. Отмечу сразу, что в сети довольно таки много различных плагинов с помощью которых можно реализовать пагинационное меню на блоге, но воспользовался я стандартной функцией, появившейся в версии 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:
Либо через регулярку:
$nav = get_the_posts_pagination();
$nav = preg_replace('~<h2.*?h2>~', '', $nav);
echo $nav;
Очень часто авторы блогов закрывают от индексации страницы пагинации и скрывает ссылки с нумерацией атрибутом rel="nofollow".
Через движок wp-includes/general-template.php:
Через регулярку:
$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;
и так далее.
Самая высокая значимость и вес страницы отдаётся первой странице, так как на неё ведёт больше всего ссылок и уровень вложенности выше всех остальных.
Доброго времени суток, подскажите пожалуйста, ecть страница archive-article, на ней пагинацыя норм работает, есть страница single-article, то что single это вывод конкретного поста я понимаю, но если в нем хочу вывести список дочерних постов, можно ли на нем реализовать пагинацыю!? Она отображается но переходить по ссылкам не переходит!
А много постов? Может через get_posts проще будет вывести?