Boucle multiple WordPress

Publié par Jean-Michel le

Quelle est la meilleure solution lorsque nous avons plusieurs boucles dans la même page ? J’utilise pour la boucle principale ceci:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<?php endwhile; endif; ?>

Maintenant, j’essaie d’ajouter une nouvelle boucle dans la même page (dans un emplacement différent) pour les articles en vedette dans un nom de catégorie spécifique, ce qui est pour vous le meilleur choix : (« contenu » est juste par exemple)

1- Utilisez get_posts();

<?php global $post;
$args = array( 'category_name' => 'destaques' );
$myposts = get_posts( $args );
foreach( $myposts as $post ) :  setup_postdata($post); ?>

   "content"

<?php endforeach; ?>

2- Utilisez WP_Query();

<php $my_query = new WP_Query("category_name=destaques");
while ($my_query->have_posts()) : $my_query->the_post(); ?>

   "content"

<?php endwhile; ?>

3 : Utilisez query_posts();

<?php query_posts( 'category_name=destaques' );
if (have_posts()) : while (have_posts()) : the_post(); ?> 

   "content"

<?php endwhile; endif; ?>

Lequel choisissez-vous et pourquoi ?

Lire également:  Wordpress : Afficher tous les articles de la catégorie

Merci.

Solution n°1 trouvée

Je ne suis pas sûr des autres mais mon choix est le plus souvent ou non

<?php 
query_posts('showposts=1&cat=-48'); // our custom query
if ( have_posts() ) : while ( have_posts() ) : the_post();  // Start the loop
    $img = get_post_meta($post->ID, "postimage", $single = true);//any custom fields?
?>
    <a href="<?php the_permalink() ?>" title="Permanent Link to <?php the_title(); ?>">
      <img src="<?php echo $img; ?>" alt="<?php the_title(); ?>" />
    </a>
<?php
endwhile; endif;// End the Loop and Check for Posts
wp_reset_query(); // Reset the loop
?>
<div>stuff</div>
<?php 
query_posts('showposts=5&cat=5'); // our custom query
if ( have_posts() ) : while ( have_posts() ) : the_post();  // Start the loop
    $img = get_post_meta($post->ID, "postimage", $single = true);//any custom fields?
?>
    <h2>Title</h2>
    etc..etc..
<?php
endwhile; endif;// End the Loop and Check for Posts
wp_reset_query(); // Reset the loop
?>

cela s’avère bien fonctionner pour mes besoins…

Lire également:  Wordpress : Comment réorganiser les éléments renvoyés par wp_list_comments() ?

Solution n°2 trouvée

Le choix optimal est get_posts();

Voici le raisonnement du WordPress Function Reference pour les messages de requête :

La fonction query_posts() est destinée à être utilisée pour modifier la boucle de la page principale uniquement. Il n’est pas conçu comme un moyen de créer des boucles secondaires sur la page. Si vous souhaitez créer des boucles séparées en dehors de la boucle principale, vous devez utiliser get_posts() à la place. L’utilisation de query_posts() sur des boucles autres que la boucle principale peut rendre votre boucle principale incorrecte et éventuellement afficher des choses auxquelles vous ne vous attendiez pas.

La fonction query_posts() remplace et remplace la requête principale de la page. Pour sauver votre santé mentale, ne l’utilisez pas à d’autres fins.

La fonction query_posts() crée un nouvel objet WP_Query et l’affecte à la variable globale wp_query. La fonction get_posts() crée un nouvel objet WP_Query sans remplacer quoi que ce soit dans la zone globale.

Solution n°3 trouvée

J’utiliserais le numéro 3. C’est plus facile à lire et à comprendre.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *