Несколько циклов на одной странице без дублирования контента
Я пытаюсь создать страницу с несколькими циклами, где каждый цикл должен отображать предопределенное количество записей из одной и той же категории (каждый цикл отображает X количество записей из категории CATS). При этом нужно, чтобы второй цикл, третий и последующие отображали записи с того места, где остановился предыдущий цикл, без дублирования контента (например: цикл 1 с записи 1 по 5, цикл 2 с записи 6 по 10, цикл 3 с записи 11 по 15 и т.д.). Вот что я пробовал до сих пор (я также пробовал код из WordPress Codex, но ничего не работает)
Можете помочь?
Вот мой код на данный момент:
<?php if (have_posts()) : ?>
<?php $mosaics = new WP_Query('category_name=mosaics&posts_per_page=5'); ?>
<?php while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php if( $post->ID == $do_not_duplicate ) continue; ?>
<?php echo get_the_content(); ?>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
<br />
<?php if (have_posts()) : ?>
<?php $mosaics = new WP_Query('category_name=mosaics&posts_per_page=4'); ?>
<?php while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php if( $post->ID == $do_not_duplicate ) continue; ?>
<?php echo get_the_content(); ?>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
<br />
<?php if (have_posts()) : ?>
<?php $mosaics = new WP_Query('category_name=mosaics&posts_per_page=3'); ?>
<?php while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php if( $post->ID == $do_not_duplicate ) continue; ?>
<?php echo get_the_content(); ?>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
<br />
<?php if (have_posts()) : ?>
<?php $mosaics = new WP_Query('category_name=mosaics&posts_per_page=2'); ?>
<?php while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php if( $post->ID == $do_not_duplicate ) continue; ?>
<?php echo get_the_content(); ?>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
Важно прочитать эту главу Codex до конца, так как основные рекомендации находятся после заголовка 'Примечание для нескольких записей в первой категории';
повторяющийся, утомительный код:
<?php $do_not_duplicate = array(); ?>
<?php $mosaics = new WP_Query('category_name=mosaics&posts_per_page=5'); ?>
<?php while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php $do_not_duplicate[] = $post->ID; ?>
<?php echo get_the_content(); ?>
<?php endwhile; wp_reset_postdata(); ?>
<br />
<?php $mosaics = new WP_Query( array( 'category_name' => 'mosaics', 'posts_per_page' => 4, 'post__not_in' => $do_not_duplicate ) ); ?>
<?php while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php $do_not_duplicate[] = $post->ID; ?>
<?php echo get_the_content(); ?>
<?php endwhile; wp_reset_postdata(); ?>
<br />
<?php $mosaics = new WP_Query( array( 'category_name' => 'mosaics', 'posts_per_page' => 3, 'post__not_in' => $do_not_duplicate ) ); ?>
<?php while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php $do_not_duplicate[] = $post->ID; ?>
<?php echo get_the_content(); ?>
<?php endwhile; wp_reset_postdata(); ?>
<br />
<?php $mosaics = new WP_Query( array( 'category_name' => 'mosaics', 'posts_per_page' => 2, 'post__not_in' => $do_not_duplicate ) ); ?>
<?php while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php $do_not_duplicate[] = $post->ID; ?>
<?php echo get_the_content(); ?>
<?php endwhile; wp_reset_postdata(); ?>

Хотя ответ Майкла работает, выполнение нескольких запросов для этой цели — это растрата ресурсов базы данных, когда можно получить все результаты в одном запросе и обработать разделение вывода в PHP. Смотрите этот ответ, который я дал на другой, похожий вопрос, чтобы достичь тех же результатов с помощью одного запроса к базе данных.

Используйте параметр Offset для последующих циклов, это позволит начать отображение записей после указанного вами номера:
// начинаем с 6-й по 10-ю запись
$mosaics = new WP_Query('category_name=mosaics&posts_per_page=5&offset=5');
// начинаем с 11-й по 15-ю запись
$mosaics = new WP_Query('category_name=mosaics&posts_per_page=5&offset=10');
