web-dev-qa-db-fra.com

Utilisation de query_posts dans la boucle single.php

À l'intérieur de ma boucle dans single.php, j'ai utilisé une requête personnalisée à l'aide de get_posts pour renvoyer les publications appartenant à une certaine catégorie.

<?php                                                   global $post;
                                                        $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
                                                        $myposts = get_posts("paged=$paged&category=5");?>

<?php foreach($myposts as $post) :?>

<?php the_title();?>

<?php endforeach; ?>

Le problème est que la boucle d'origine, qui est la boucle single.php, semble ne pas fonctionner après l'exécution de la requête. Par exemple, les liens de navigation (suivant et précédent) ne fonctionnent pas.

Avez-vous déjà fait face à ce problème? votre aide est appréciée.

Vous devez appeler wp_reset_postdata() après votre requête pour restaurer la variable globale $post utilisée par les fonctions de lien de navigation pour déterminer les publications suivantes/précédentes.

5
Milo

Vous pouvez également utiliser WP_Query au lieu de get_posts . Fait à peu près la même chose, mais à titre de référence:

$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$args =  array ( 'category' => 5, 'paged' => $paged, 'posts_per_page'=> 5 );
$catPosts = new WP_Query( 'post_type=post' );

if( $catPosts->have_posts() ){ ?>
    <ul>

    <?php while ($catPosts->have_posts()) : $catPosts->the_post(); ?>
        <li>
            <a href="<?php the_permalink();?>"><?php the_title(); ?></a>
        </li>
    <?php endwhile; ?>

    </ul>
<?php 
} else {
    // no posts found
}

wp_reset_postdata();
4
helgatheviking