kopvi64
@kopvi64

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

Доброго времени суток!

С помощью вот такого кода я вывожу последние записи c пагинацией в WordPress:

<?php
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
get_template_part( 'template-parts/content-my', get_post_type() );
endwhile;
the_posts_navigation();
else :
get_template_part( 'template-parts/content-my', 'none' );
endif;
?>

Все работает хорошо, на первой странице выводится столько новостей, сколько я задал в настройках чтения WordPress (4) и на второй 3, всего новостей 7.

Но проблема сосотоит в том, что стоит мне добавить "query_posts('cat=2');" после "if ( have_posts() ) :" , чтобы вывести новости только определенной категории, то пагинация перестает работать корректно. Вместо того, чтобы вывести 4 поста на первой странице и 2 поста на второй (всего 6 новостей в этой категории), получается на первой странице 4 последних новости и на второй странице все те же 4 последних новости.

Не могу понять в чем проблема

Зарание спасибо
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
@altkov
Добавь в query_posts фильтр paged и приравняй его get_query_var('paged')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Вам нельзя использовать query_posts(), это системная функция ядра, вы сломаете основной запрос. Чтобы его поправить используйте хук pre_get_posts

add_action( 'pre_get_posts', 'set_front_page_category' );
function set_front_page_category( $query ) {
	if ( $query->is_front_page() && $query->is_main_query() ) {
		$query->set( 'cat', '2' );
	}
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы