2010-04-28 6 views
2

J'ai édité le single.php pour répondre à mes besoins et cela fonctionne. Je ne reste dans la partie de la boucle qui se présente comme suit:wordpress sidebar et le code php de boucle se déforme

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
    <div <?php post_class() ?> id="post-<?php the_ID(); ?>"> 
     <div class="entry"> 
     <?php the_content('<p class="serif">Read the rest of this entry &raquo;</p>'); ?> 
     <?php wp_link_pages(array('before' => '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>  </div> 
    </div> 
<?php endwhile; else: ?> 

    <p>Sorry, no posts matched your criteria.</p> 

<?php endif; ?> 

Il displayes seul le texte, comme je veux. Le problème que je rencontre est lorsque j'ajoute le code suivant à utiliser comme barre latérale dans le modèle;

<?php query_posts('showposts=10'); ?> 
<?php while (have_posts()) : the_post(); ?> 
<a href="<?php the_permalink() ?>" rel="bookmark" title="Link to <?php the_title(); ?>"> 
<?php the_title(); ?></a><br /> 
<?php endwhile;?> 

Il devrait afficher le titre des 10 derniers messages. Mais maintenant, la boucle affiche également la dernière (full0 10 messages au lieu d'un seul post qui appartient au permalien ... Je pense qu'une variable ou si est en cours de réutilisation et doit être repos .. Notez que dans le single.php d'abord, vous obtenez le code de barre latérale, puis vous obtenez le code « boucle ».

alors pourquoi wordpress comporte de cette façon?

+0

peut-être essayer rewind_posts() avant query_posts() dans la barre latérale – DCrystal

Répondre

5

la raison pour laquelle cela se produit est parce que Wordpress est un labyrinthe cauchemardesque de variables globales. . query_posts() est l'un des pires délinquants Si vous cochez la documentation pour cette fonction, vous verrez qu'ils ont même pour vous avertir d'utiliser essentiellement pas:

Remarque importante

La fonction query_posts est destinée à utiliser pour modifier la page principale en boucle uniquement. Il n'est pas prévu que signifie créer des boucles secondaires sur la page . Si vous souhaitez créer des boucles distinctes en dehors de la boucle principale, vous devez créer des objets WP_Query distincts et les utiliser à la place. L'utilisation de query_posts sur des boucles autres que le principal peut entraîner l'annulation de votre boucle principale et éventuellement l'affichage de choses que vous n'attendiez pas .

Ils ont ajouté un objet orienté choses que vous pouvez maintenant utiliser à la place, à savoir le WP_Query object (pourquoi ils ont pas revu les pages « principales » pour se débarrasser du ridicule « The Loop » truc est encore discutable).

Vous allez vouloir faire quelque chose comme ça dans la barre latérale:

<?php 
$recentPosts = new WP_Query(); 
$recentPosts->query('showposts=10'); 
while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?> 

<a href="<?php the_permalink() ?>" rel="bookmark" 
    title="Link to <?php the_title(); ?>"> 
<?php the_title(); ?></a><br /> 
<?php endwhile;?> 

Google autour sur l'utilisation WP_Query si vous voulez more examples.

+0

excellent, merci pour l'explication complète! – theDoctor

1
requête ('showposts = 10'); while ($ recentPosts-> have_posts()): $ recentPosts-> the_post(); ?>

"

rel =" "title =" bookmark Lien vers « >

lecture du code u mettre dans la barre latérale, u essayez d'obtenir les 10 derniers titres de messages à afficher dans la barre latérale, non?si oui u peut simplement utiliser cette ligne:

`<?php wp_get_archives('title_li=&type=postbypost&limit=10'); ?> 
Questions connexes