WordPress Пагинация без Плагина
Рассмотрим, как добавить пагинацию в WordPress без плагинов. Наверняка все использовали различные популярные плагины для реализации пагинации, сегодня мы создадим пагинацию при помощи WordPress функции paginate_links(). Это позволит создать пагинацию для любых типов страниц в любом месте вашей темы.
Список параметров, доступных для использования функцией paginate_links():
echo paginate_links([
'base' => '%_%', // базовый формат URL
'format' => '?page=%#%', // строка замены /page/1/
'total' => $total, // всего страниц
'current' => $current, // текущая страница
'aria_current' => 'page', // 'page', 'step', 'location', 'date', 'time', 'true', 'false'
'show_all' => false, // настраивается end_size и mid_size (или показ всех страниц)
'prev_next' => true, // показ ссылок предыдущая/следующая
'prev_text' => '« Ранее', // анкор ссылки на предыдущую страницу
'next_text' => 'Далее »', // анкор ссылки на следующую страницу
'end_size' => 1, // кол-во ссылок в начале и конце
'mid_size' => 2, // кол-во ссылок до и после текущей страницы
'type' => 'plain', // в каком виде вернуть результат ('plain', 'array', 'list')
'add_args' => array(), // добавление параметров к ссылкам
'add_fragment' => '', // добавление текста к ссылкам
'before_page_number' => '', // тест до числа пагинации
'after_page_number' => '', // текст после числа
]);
Пример приближенный к реальному проекту. Создание пагинации для произвольного типа записи:
if (is_front_page()) {
$currentPage = (get_query_var('page')) ? get_query_var('page') : 1;
} else {
$currentPage = (get_query_var('paged')) ? get_query_var('paged') : 1;
}
$posts_Query = new WP_Query(array(
'post_type' => 'production', // тип записи
'posts_per_page' => 3, // кол-во записей на странице
'paged' => $currentPage, // текущая страница
));
# $GLOBALS['wp_query'] = $posts_Query; // для получения в function.php
if ($posts_Query->have_posts()) {
while ($posts_Query->have_posts()) {
$posts_Query->the_post();
get_template_part('template');
}
wp_reset_postdata();
}
echo paginate_links([
'base' => str_replace(999999999, '%#%', get_pagenum_link(999999999)),
'format' => '',
'current' => max(1, $currentPage),
'total' => $posts_Query->max_num_pages,
]);
По умолчанию разметка пагинации будет следующая:
Добавление обёртки для пагинации
Добавим обёртку, например, с классом pagination. Замените:
echo paginate_links([
'base' => str_replace(999999999, '%#%', get_pagenum_link(999999999)),
'format' => '',
'current' => max(1, $currentPage),
'total' => $posts_Query->max_num_pages,
]);
Следующим кодом:
$pagination = paginate_links([
'base' => str_replace(999999999, '%#%', get_pagenum_link(999999999)),
'format' => '',
'current' => max(1, $currentPage),
'total' => $posts_Query->max_num_pages,
]);
echo "<div class='pagination'>" . $pagination . "</div>";
Получаем:
Создание пагинации в виде списка
Чтобы создать WordPress пагинацию в виде списка, необходимо изменить type на list:
echo paginate_links([
'base' => str_replace(999999999, '%#%', get_pagenum_link(999999999)),
'format' => '',
'current' => max(1, $currentPage),
'total' => $posts_Query->max_num_pages,
'type' => 'list'
]);
Получаем:
Изменить класс page-numbers можно следующим образом:
$pagination = paginate_links(array());
echo str_replace('page-numbers', 'pagination', $pagination);
Создание функции пагинации в function.php
Чтобы сделать код более красивым, можно вынести всю логику пагинации в function.php:
function my_pagination()
{
global $wp_query;
if (is_front_page()) {
$currentPage = (get_query_var('page')) ? get_query_var('page') : 1;
} else {
$currentPage = (get_query_var('paged')) ? get_query_var('paged') : 1;
}
$pagination = paginate_links([
'base' => str_replace(999999999, '%#%', get_pagenum_link(999999999)),
'format' => '',
'current' => max(1, $currentPage),
'total' => $wp_query->max_num_pages,
'type' => 'list',
'prev_text' => '«',
'next_text' => '»',
]);
echo str_replace('page-numbers', 'pagination', $pagination);
}
Необходимо раскомментировать строку $GLOBALS['wp_query'] = $posts_Query;.
Вывод в шаблоне:
my_pagination();
Таким образом, можно сделать вывод, что совсем необязательно использовать сторонние плагины для создания пагинации на сайте WordPress, с этой задачей отлично справляется paginate_links().
Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.
Статьи из данной категории:
Комментарии
- Комментариев пока нет.