jivo banner 468x60jivo banner 728x90jivo banner 930x180flexbe banner 468x60flexbe banner 728x90flexbe banner 930x180beget banner 468x60beget banner 728x90beget banner 930x180

Как добавить пагинацию для страниц или cpt с использованием WP_Query()

Вордпресс устроен таким образом, что для любого запроса постов из базы с помощью WP_Query() вы можете сделать пагинацию, поскольку для этого в запросе уже есть необходимые аргументы 'paged' и 'posts_per_page'.

Под пагинацией мы понимаем страничную навигацию. Например, если мы указываем вывод 10 постов на странице, а в ответе WP_Query() нам возвращается информация о 32 записях, то пагинация покажет нам ссылки на 2, 3 и 4 страницу.

И последнее — если вы находитесь в любом архивном шаблоне, например, archive.php, category.php, index.php и др., то там уже существует основной цикл и делать повторно запрос не нужно, в этой же статье мы разбираем пагинацию для произвольного запроса на примере страниц типа page.

Разберем код на примере:

// получаем номер страницы пагинации
$current = absint( max( 1, get_query_var( 'paged' ) ? get_query_var( 'paged' ) : get_query_var( 'page' ) ) );

// собираем запрос
$args = array(
	'post_type'      => 'page',
	'posts_per_page' => 10,
	'paged'          => $current,
);		

$my_query = new WP_Query( $args );

if ( $my_query->have_posts() ) {

	echo '<ul class="posts-list">';
	
	// основной цикл
	while ( $my_query->have_posts() ) {
		$my_query->the_post();

		echo '<li class="posts-list__item">';
			echo '<a href="' . esc_url(get_the_permalink()) . '">' . get_the_title() . '</a>';
		echo '</li>';
	}

	echo '</ul>';

	wp_reset_postdata(); // возвращаем глобальный цикл
 
 	// выводим пагинацию
	echo wp_kses_post(
		paginate_links(
			[
				'total'   => $my_query->max_num_pages, // количество берем из дефолтной опции запроса
				'current' => $current, // текущая страница
			]
		)
	);
} else {
	// выводим шаблон "нет контента", если в запросе нет постов
	get_template_part( 'templates/content', 'none' );
}

Сначала собираем переменные для запроса. Здесь у нас два обязательных аргумента: 'posts_per_page' (кол-во постов на странице) и 'paged' (страница пагинации Х), остальные указываются в зависимости от запроса.

Далее мы делаем запрос WP_Query(), собираем полученные данные в переменную и выводим, делаем резет кастомного цикла и выводим пагинацию.

В случае, когда данных нет выводим шаблон templates/content-none.php.

Чтобы узнать, какие данные вам пришли в переменную $my_query важно уметь печатать переменные.

Проблема с редиректом в пагинации

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

В WordPress редирект всегда включен по умолчанию, но в случае с кастомной пагинацией его нужно отключить.

// отключаем редирект для страниц, потому что при /page/2 редиректит на /
add_filter('redirect_canonical', 'disable_page_redirect');
function disable_page_redirect( $redirect_url ) {

	if( is_page() ) {
		$redirect_url = false;
		return $redirect_url;
	} 
	
}

Проблема с 404 в пагинации

Если все выводится правильно, но вы ловите 404 ошибку при клике на пост, вам нужно сбросить кеш ссылок. Зайдите в раздел Настройки -> Постоянные ссылки и нажмите «Сохранить»

etxt banner 480x320etxt banner 728x90etxt banner 120x600jivo banner 480x320jivo banner 728x90jivo banner 120x600smsc banner 480x320smsc banner 728x90smsc banner 120x600

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 3 / 5. Количество оценок: 2

Оценок пока нет. Поставьте оценку первым.

Похожие посты

Как сделать webp без плагинов в WordPress

WebP — это современный формат сжатия изображений без потери качества, который напрямую влияет на скорость загрузки сайта. Конвертирование изображений из jpg и png в формат webp может дать существенный прирост в баллах по google page speed. Формат webp поддерживается большинством современных браузеров. Вы без труда можете найти плагины, которые помогут вам автоматически конвертировать изображения, добавленные…
Подробнее

Как вывести все изображения из произвольной папки без плагинов в WordPress

При разработке своих сайтов вам может понадобиться вывести галереи изображений из произвольных папок без их загрузки в библиотеку. Давайте рассмотрим пример, как это сделать с помощью шорткода: Использование: [folder-gallery path=’/data/images/’] Как видите, функция принимает путь до искомой папки (обязательно с открывающим и закрывающим слешем), в функции устанавливаются разрешенные типы изображений и формируется вывод с классами…
Подробнее

Как изменить выравнивание и размер изображения при вставке в редактор WordPress

При добавлении изображения в пост, по умолчанию WordPress вставляет его в размере medium и без выравнивания. Чтобы при загрузке картинки ей прописывалось выравнивание по центру и полный размер, вы можете использовать такой код:
Подробнее