web-dev-qa-db-fra.com

Boucle spécifique pour 2 <div> dans chaque <li>

J'ai besoin de créer une boucle qui peut logiquement être décrite comme suit pour un carrousel:

  • 3 boucles
  • 2 messages par boucle
  • Pas de doublons
  • Commande par date de publication

Visuel:

< Start Loop #1 >
< Post #1 >
< Post #2 >
< End Loop #1 >

< Start Loop #2 >
< Post #3 >
< Post #4 >
< End Loop #2 >

< Start Loop #3 >
< Post #5 >
< Post #6 >
< End Loop #3 >

Idéalement, je souhaiterais une solution qui permette de réaliser des boucles infinies de cette manière sans doublons. J'ai consulté le codex WP, mais je n'ai pas trouvé de solution spécifique qui corresponde à mon code présenté ici: http://Pastebin.com/LitYb0wh

Comment puis-je faire la boucle pour travailler avec ce type de structure?

<ul>

<li>
<div>Post 1</div>
<div>Post 2</div>
</li>

<li>
<div>Post 3</div>
<div>Post 4</div>
</li>

<li>
<div>Post 5</div>
<div>Post 6</div>
</li>

</ul>
1
user31940

j'utilise ce code dans mon portefeuille http://pocketapps.co/

enter image description here

<?php $args = array(
                                    //your argument code
                                );
            query_posts($args);?>

            <ul>
                 <?php  
                 $ls=0;
                    while ( have_posts() ) : the_post(); 
            ?>
                    <?php if($ls%2==0): echo '</li><li>'; endif; ?>
                    <div class="app">
                            //your code here

                    </div>
             <?php 
                $ls++;
                endwhile;
                wp_reset_query();
             ?>
            </ul>
1
ravi patel

Pour correspondre précisément à votre modèle de trois <ul>, vous pouvez procéder comme suit:

$my_query = new WP_Query();
$my_query->query($args);
$skip = 2;
echo '<ul>';
while ($my_query->have_posts()) {
  $my_query->the_post();
  echo '<li>'.$post->post_title.'</li>';
  if ( ( ($my_query->current_post-1) % $skip ) == 0) {
    break;
  }
}
echo '</ul>';
echo '<ul>';
while ($my_query->have_posts()) {
  $my_query->the_post();
  echo '<li>'.$post->post_title.'</li>';
  if ( ( ($my_query->current_post-1) % $skip ) == 0) {
    break;
  }
}
echo '</ul>';
echo '<ul>';
while ($my_query->have_posts()) {
  $my_query->the_post();
  echo '<li>'.$post->post_title.'</li>';
  if ( ( ($my_query->current_post-1) % $skip ) == 0) {
    break;
  }
}
echo '</ul>';

Cependant, la suite est plus petite, plus nette et devrait créer autant de <ul>s en fonction de la taille de la requête, ce qui, je suppose, est ce que vous voulez dire lorsque vous dites "boucles infinies de cette façon".

$my_query = new WP_Query();
$my_query->query($args);
$skip = 2;
while ($my_query->have_posts()) {
  if ( ( ($my_query->current_post-1) % $skip ) == 0) {
    echo '<ul>';
  }
  $my_query->the_post();
  echo '<li>'.$post->post_title.'</li>';
  if ( ( ($my_query->current_post-1) % $skip ) == 0) {
    echo '</ul>';
  }
}

Une option utilisant un seul <ul>

$my_query = new WP_Query();
$my_query->query($args);
$skip = 2;
echo '<ul>';
  while ($my_query->have_posts()) {
    if ( ( ($my_query->current_post-1) % $skip ) == 0) {
      echo '<li>';
    }
    $my_query->the_post();
    echo '<div>'.$post->post_title.'</div>';
    if ( ( ($my_query->current_post-1) % $skip ) == 0) {
      echo '</li>';
    }
  }
echo '</ul>';

Le $args que j'avais l'habitude de tester est ...

$args = array(
  'post_type' => 'post',
  'post_status' => 'publish',
  'posts_per_page' => 8,
  'order' => 'ASC',
);

... mais cela devrait fonctionner avec tout ce que vous fournissez.

Cela suppose que vous ne voulez pas interroger un ensemble distinct de publications pour chaque boucle.

Évidemment, je n'ai pas intégré cela dans votre code existant, mais le modèle devrait être facile à appliquer.

0
s_ha_dum