@tyoma_koder

Как сделать пагинацию wordpress?

Код ниже выводит пагинацию, но на каждой странице контент 1й страницы, в чём дело?
$q = new WP_Query("cat=3&showposts=5");
 if(have_posts()) : query_posts("cat=3");
while($q->have_posts()): $q->the_post();
//вёрстка
endwhile;
endif;
$args = array(
		'show_all'     => false, // показаны все страницы участвующие в пагинации
		'end_size'     => 1,     // количество страниц на концах
		'mid_size'     => 1,     // количество страниц вокруг текущей
		'prev_next'    => true,  // выводить ли боковые ссылки "предыдущая/следующая страница".
		'prev_text'    => __('←'),
		'next_text'    => __('→'),
		'add_args'     => false, // Массив аргументов (переменных запроса), которые нужно добавить к ссылкам.
		'add_fragment' => '',     // Текст который добавиться ко всем ссылкам.
		'screen_reader_text' => __( 'Posts navigation' ),
);
the_posts_pagination( $args );
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
Без контекста сложно понять, что вы пытаетесь сделать. Аргумент showposts давно устарел, а query_posts() вообще использовать нельзя. Предположу, что the_posts_pagination(), берет данные из основного цикла, а не из вашего

Вот рабочий пример для вывода пагинации для кастомного запроса:

// получаем номер страницы пагинации
$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() ) {

	// основной цикл
	while ( $my_query->have_posts() ) {
		$my_query->the_post();
		//вёрстка
	}

	wp_reset_postdata(); // возвращаем глобальный цикл

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


Если наткнетесь на проблемы с редиректами или 404 при пагинации, читайте тут.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы