@SeokkySss

При выводе записей кастомного типа, в пагинацию передается кол-во страниц, нужных для записей типа «post» — как исправить?

Вот код основного цикла темы Make.

<?php
/**
 * @package Make
 */

get_header();

// Section Header
ob_start();
make_breadcrumb();
$section_header = trim( ob_get_clean() );

global $post;
?>

<?php ttfmake_maybe_show_sidebar( 'left' ); ?>

<main id="site-main" class="site-main" role="main">

<?php 

	$paged = get_query_var( 'paged', 1 );
	$args = array(
		'post_type' => 'article',
		'posts_per_page' => '5',
		'paged' => $paged,
	);

	$articles = new WP_Query($args);
?>

<?php if ( $articles->have_posts() ) : ?>

	<?php if ( $section_header ) : ?>
	<header class="section-header">
		<?php echo $section_header; ?>
	</header>
	<?php endif; ?>
	
	<!-- если отображается лента записей, то запускаем цикл -->
	<?php if (is_home()): ?>
		<?php while ( $articles->have_posts() ) : $articles->the_post(); ?>
			<?php
				$template_type = apply_filters( 'make_template_content_archive', 'archive', $post );
				get_template_part( 'partials/content', $template_type ); 
			?>
		<?php endwhile; ?>

		<!-- сбрасываем данные цикла -->
		<?php wp_reset_postdata(); ?>
	<?php endif; ?>

	<!-- если отображается конкретная запись, показываем только открытую запись-->
	<?php if (is_singular('article')): ?>
		<?php $template_type = apply_filters( 'make_template_content_archive', 'archive', $post );
		get_template_part( 'partials/content', $template_type ); ?>
	<?php endif; ?>
	
	<?php get_template_part( 'partials/nav', 'paging' ); ?>

<?php else : ?>
	<?php get_template_part( 'partials/content', 'none' ); ?>
<?php endif; ?>
</main>

<?php ttfmake_maybe_show_sidebar( 'right' ); ?>

<?php get_footer(); ?>


Т.е. в случае, когда обычных записей типа "post" 10 штук (и в настройках wp стоит отображение на одной странице 5 записей), в пагинации показывается 2 страницы, хотя выводятся кастомные записи, которых 5 или меньше (т.е. в пагинации должна быть одна страница).
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Пагинация всегда рассчитывалась и будет рассчитываться от основного цикла. Основной цикл, он же Main Query, это тот, который WordPress запускает сам, после того как спарсит request и определит по rewrite rules а чего вы от него хотите.

Произвольные запросы с помощью new WP_Query( $args ) не являются и не могут являться основным запросом, это всегда будет дополнительный запрос, который выполняется уже после основного. Отсюда, оно совершенно никак не влияет на пагинацию, что вполне логично и разумно - ведь у вас на одной странице дополнительных циклов WP_Query может быть много.

С основным же запросом и изменением его параметров работают через хук pre_get_posts (а в нем изолируют именно is_main_query).

Матчасть, все есть в официальной документации с примерами кода.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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