Сделать значение posts_per_page одинаковым на всех страницах

Я почти закончил с этим, осталась небольшая проблема. Надеюсь, ты поможешь мне.

У меня есть два очень простых пользовательских цикла. Один для липких сообщений и один для нелипких. Мне удалось заставить липкие сообщения появляться на странице 1, а не на остальных страницах (при использовании разбивки на страницы), что я и хочу. Проблема в том, что: если я использую post_per_page, установленный в 8, и у меня 1 липкая почта в моей базе данных, я получаю 9 сообщений на первой странице и 8 на остальных страницах.

Мне удалось изменить значение posts_per_page с этим скриптом между циклами:

$postcount = $wp_query->post_count; $postnumber = 8; if ( $paged != True ){ $postnumber = $postnumber - $postcount; } 

и это почти работает. Если у меня есть 1 липкий пост и пост 15-9 на первой странице, а затем нажмите следующую кнопку, WP пропускает сообщение # 8 и отображает только 7-1 на следующей странице.

Вот мой код:

 <!-- Sticky --> <?php if ( $paged != True ): ?> <?php $wp_query = new WP_Query(array('post__in' => get_option('sticky_posts'), 'category_name' => Work)); ?> <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <?php get_template_part( 'loop', 'index' ); ?> <?php endwhile; ?> <?php wp_reset_postdata(); // reset the query ?> <?php endif ?> <?php $postcount = $wp_query->post_count; $postnumber = 8; if ( $paged != True ){ $postnumber = $postnumber - $postcount; } ?> <!-- Non-Sticky --> <?php $wp_query = new WP_Query(array('post__not_in' => get_option('sticky_posts'), 'category_name' => Work, 'posts_per_page' => $postnumber, 'paged' => $paged)); ?> <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <?php get_template_part( 'loop', 'index' ); ?> <?php endwhile; ?> <?php wp_reset_postdata(); // reset the query ?> 

Проблема в том, что на первой странице вы просите, скажем, 7 «обычных» сообщений. Таким образом, он отображает последние 7 сообщений: например, 15-9.

На второй странице вы сообщаете WordPress, я хочу 8 сообщений на странице, и я хочу вторую страницу. Внутренняя логика заключается в том, что если у вас есть 8 сообщений на странице, и вы находитесь на второй странице, то вам нужны 9-я-16-я должности (в этом случае 9-я должность – 7 с момента ее заказа по дате).

Вы можете вручную установить смещение, чтобы исправить это, но для этого требуется знать, сколько «нормальных» сообщений появилось на первой странице. В любом случае…

Что касается наличия липких сообщений наверху – WordPress должен сделать это за вас. То есть, если вы опускаете атрибут post__not_in тогда липкие сообщения должны появляться сверху, и у вас будет одинаковое количество сообщений для каждой страницы. Если это не для шаблона страницы, вам не нужно будет запускать собственный запрос.

Что касается кода, который вы опубликовали:

  • Избегайте использования переменной $wp_query – это то, что WordPress вызывает «основной запрос» для страницы.
  • Для проверки того, находитесь ли вы на первой или последующих страницах, используйте is_paged()
  • Как правило, лучше использовать tax_query а не «category_name».
  • Если можно, не редактируйте петлю внутри шаблона – вместо этого используйте pre_get_posts чтобы внести изменения в запрос, прежде чем он туда попадет. Смотрите этот пост и этот Кодекс .

Надеюсь, это поможет 🙂

ну, у меня была такая же потребность, и я просто добавил липкие сообщения из первого цикла в массив …

 $stickyposts[] = get_the_ID(); 

и затем используется во втором цикле

 'posts_per_page' => 8-count($stickyposts) 

он работает.