web-dev-qa-db-fra.com

Sortie 2 éléments dans la boucle

J'ai une requête qui parcourt le <li> et affiche le nombre de <li> que j'ai. Est-il possible de faire en sorte que la boucle extrait 2 <li> à la fois plutôt qu'un?

// 5 list items
<ul>
<?php while(has_posts()): the_post(); ?>
    <li>
        <div class="slide"><?php the_content(); ?></div>
    </li>
<?php endwhile; ?>
</ul>

sortie

<ul>
    <li><div class="slide">content 1</div></li>
    <li><div class="slide">content 2</div></li>
    <li><div class="slide">content 3</div></li>
    <li><div class="slide">content 4</div></li>
    <li><div class="slide">content 5</div></li>
</ul>

et comment j'aimerais que ça sorte ...

<ul>
   <li>
       <div class="slide">
           content 1
           content 2
       </div>
   </li>
   etc...
</ul>

J'espère que vous comprenez ce que j'essaie de faire.

Merci!

1
Romes

Utilisation facile de la requête WP (apprenez à le connaître ...)

<ul>
    <?php
        $recentPosts = new WP_Query();
        $recentPosts->query('showposts=2'); // SET AMOUNT HERE
    ?>
    <?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?>
        <li><div class="slide"><?php the_content(); ?></div></li>
    <?php endwhile; ?>
</ul>

J'espère que cela t'aides. Faites-moi savoir si vous rencontrez un problème.


EDIT 1:
* explenation - vient d’ajouter un petit compteur conditionnel

<ul>
    <?php 
        $count = 1;
        while(has_posts()): the_post(); 
    ?>

        <?php if ($count == 1) {echo '<li><div class="slide">';} ?>
        <?php the_content(); ?>
        <?php if ($count == 3) {echo '</div></li>'; $count = 1;} else {$count++;} ?>

    <?php endwhile; ?>
</ul>

EDIT 2:
* s'il vous plaît noter que j'ai changé has_post pour avoir_post (pensez que cela devrait être ainsi? votre appel)

<?php 
    echo '<ul>';
    $count = 1;

    while(have_posts()): the_post(); 

    if ($count == 1) {$slideOpenTag = '<li><div class="slide">';} else {$slideOpenTag = '';}
    if ($slideOpenTag) {echo $slideOpenTag;}

    the_content();

    if ($count == 3) {$slideCloseTag = '</div></li>'; $count = 1;} else {$count++; $slideCloseTag = '';}
    if ($slideCloseTag) {echo $slideCloseTag;}

    endwhile;
    if (!$slideCloseTag) {echo '</div></li>';}
    echo '<ul>';        
?>
2
Sagive SEO

S'appuyant sur le post de Sagive SEO , cela semble également fonctionner sans utiliser de compteurs.

echo '<ul>';

while ( have_posts() ) {
    echo '<li><div class="slide">';

    the_post();
    the_content();

    // If there is 1 more post, advance current post and add its content.
    if ( $wp_query->current_post + 1 < $wp_query->post_count ) {
        the_post();
        the_content();
    }

    echo '</div></li>';
}

echo '</ul>';

La fonction WordPress the_post () fait avancer l'index de publication d'objet $ wp_query, tout comme le next_post () WP_Query object méthode fait. L'ajout d'un second appel à the_post () affecte la valeur de la fonction have_posts ().

Cette boucle traite deux publications par boucle au lieu d'une, sauf si un nombre impair de publications est renvoyé, auquel cas la condition sera fausse et seule la dernière publication sera traitée lors de la dernière passe de boucle.

EDIT: Quelques maths pour 7 postes au total.

$ wp_query-> post_count = 7

$ wp_query-> current_post L'index de la publication en cours d'affichage (en commençant à 0).

Passer un. La première the_post() initialise $wp_query->current_post à 0. if (0 + 1 <7). La the_post() conditionnelle incrémente $wp_query->current_post à 1.

Passez deux. La première the_post() incrémente $wp_query->current_post en 2. if (2 + 1 <7). La the_post() conditionnelle incrémente $wp_query->current_post à 3.

Passer trois. La première the_post() incrémente $wp_query->current_post en 4. if (4 + 1 <7). La the_post() conditionnelle incrémente $wp_query->current_post à 5.

Passez quatre. La première the_post() incrémente $wp_query->current_post en 6. if (6 + 1 <7). Le conditionnel est faux et ne s'exécute pas.

3