Domanda
loop WP sono ampiamente utilizzati per stampare elenchi dei posti in 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; ?>
C'è un modo di visualizzare, ad esempio 3 primi post poi alcuni elementi (div nel mio caso) e di nuovo 3 prossimi post?
So che potrei fare 6 cicli in ogni div, ma forse c'è un altro modo per rompere questo codice? Forse un po 'se i loop all'interno del ciclo while? Ecco il mio concetto:
(...)
while ( $loop->have_posts() ) : $loop->the_post();
echo '3 first posts';
echo '<div class="special"></div>';
echo '3 last posts';
endwhile; ?>
Soluzione
Io non credo di aver pienamente compreso come si desidera che questo lavoro, ma se io presumo per un momento che fino a quando il ciclo ha almeno 6 posti, si desidera inserire markup extra dopo il terzo risultato in il ciclo ..
Esempio
Inserisci markup extra dopo il terzo post, quando l'iterazione corrente ha almeno 6 messaggi
<?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;
?>
In questo modo si evita la necessità di utilizzare un offset e può con paginazione, se necessario. Il havn't provato il codice, ma ho dato numerosi esempi di simile prima, semplicemente fatemi sapere di eventuali problemi e io vi riesaminare (e test) il codice.
Altri suggerimenti
È possibile limitare il numero di posti a tre nel primo ciclo:
<?php $args = array('showposts' => 3);
$the_query = new WP_Query($args);
while ($the_query->have_posts()) : $the_query->the_post();
Quindi mostrare il proprio div e poi mostrare di nuovo 3 messaggi con il parametro 'offset di' dovuto escludere le 3 Firsts quelli:
$args2 = array('showposts' => 3, 'offset' => 3 );
$the_query = new WP_Query($args2);
while ($the_query->have_posts()) : $the_query->the_post();
Ulteriori informazioni nel codice .