Dans WordPress, j'ai une page pour News qui utilise un modèle de page spécifique que j'ai créé. Cette page est remplie par les articles de presse attribués à la catégorie de nouvelles. Je n'ai besoin de montrer que deux des derniers articles de presse sur cette page avec les liens Précédent/Suivant en bas si les utilisateurs veulent lire plus de nouvelles. Cependant, les liens suivant/précédent ne fonctionnent pas. En cliquant sur eux va à/page/2 mais il montre les mêmes messages. Voici mon code .. des idées/aide appréciée!
<div id="primary">
<div id="content" role="main">
<div id="news">
<?php query_posts( "category_name=news&orderby=date&order=ASC&posts_per_page=2" ); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<p class="post-date">Posted on <?php the_date(); ?>
<?php the_excerpt(); ?>
<?php endwhile; ?>
<?php endif; ?>
<div id="more-posts">
<div class="previous-link"><?php previous_posts_link("< previous news") ?></div><div class="next-link"><?php next_posts_link ("more news >") ?></div>
</div>
</div>
</div><!-- #content -->
</div><!-- #primary -->
Lorsque vous effectuez une requête personnalisée telle que celle-ci, vous devez effectuer un "bidouillage" pour que la pagination fonctionne correctement.
Change ça:
<?php
query_posts( "category_name=news&orderby=date&order=ASC&posts_per_page=2" );
?>
... à un appel WP_Query
:
<?php
$news_query = new WP_Query( "category_name=news&orderby=date&order=ASC&posts_per_page=2" );
?>
Et ensuite, vous devez * déplacer votre objet de requête personnalisé dans le $wp_query
global`:
// Move $wp_query into a temp holder
$temp = $wp_query;
// Nullify the global object
$wp_query = null;
// Now move your custom query into the
$wp_query = $news_query;
Ensuite, mettez à jour votre initiation de boucle, à partir de ceci:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
...pour ça:
<?php if ( $news_query->have_posts() ) : while ( $news_query->have_posts() ) : $news_query->the_post(); ?>
Cela devrait faire en sorte que la pagination fonctionne comme prévu.
Lorsque vous fermez votre boucle:
<?php endwhile; ?>
<?php endif; ?>
... il suffit de restaurer le $wp_query
global d'origine:
<?php endwhile; ?>
<?php endif; ?>
<?php $wp_query = $temp; ?>
Et vous devriez être prêt à partir.