web-dev-qa-db-fra.com

Publie la pagination de l'index d'archive dans une requête personnalisée de page statique

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 -->
1
IntricatePixels

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.

0
Chip Bennett