Вопрос
Петли WP широко используются для печати списков сообщений в WordPress:
<?php $loop = new WP_Query( array( 'post_type' => 'ff', 'ff' => 'show_ff', 'orderby' => 'menu_order', 'order' => 'ASC' ));
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<!-- here we're going to have all posts from show_ff category of ff type. -->
<?php endwhile; ?>
Есть ли способ отображения, например, 3 первых сообщений, а затем какой -то элемент (в моем случае) и снова 3 следующих сообщений?
Я знаю, что мог бы сделать 6 петли в каждом DIV, но, возможно, есть другой способ нарушить этот код? Может быть, некоторые, если петли внутри, петля? Вот моя концепция:
(...)
while ( $loop->have_posts() ) : $loop->the_post();
echo '3 first posts';
echo '<div class="special"></div>';
echo '3 last posts';
endwhile; ?>
Решение
Я не думаю, что я полностью понял, как вы хотите, чтобы это сработало, но если я предполагаю на мгновение, что до тех пор, пока цикл имеет не менее 6 постов, вы хотите вставить дополнительную разметку после третьего результата в цикле. Анкет
Пример
Вставьте дополнительную разметку после третьего поста, когда текущая итерация имеет не менее 6 сообщений
<?php
if( $loop->have_posts() ) :
//$post_count = $loop->found_posts; // <-- think this is the total, corrected below
$post_count = $loop->post_count; // should be the result count for the current page
$loop_count = 0;
while ( $loop->have_posts() ) : $loop->the_post();
$loop_count++;
?>
<!-- your regular loop markup, eg. title, content, etc.. -->
<?php
if( $post_count >= 6 && $loop_count == 3 ) :
?>
<!-- extra markup to put in when it's the end of the third post of this loop -->
<?php
endif;
endwhile;
endif;
?>
Таким образом, вы избегаете необходимости использовать смещение и при необходимости использование пейджинг. Я не проверял код, но я дал многочисленные примеры, подобные этому, просто дайте мне знать о любых проблемах, и я пересмотрю (и проверю) код.
Другие советы
Вы можете ограничить количество сообщений тремя в первом цикле:
<?php $args = array('showposts' => 3);
$the_query = new WP_Query($args);
while ($the_query->have_posts()) : $the_query->the_post();
Затем покажите свой div, а затем покажите еще 3 сообщения с параметра «смещение», чтобы придать 3 первых:
$args2 = array('showposts' => 3, 'offset' => 3 );
$the_query = new WP_Query($args2);
while ($the_query->have_posts()) : $the_query->the_post();
Больше Infos в кодекс.