web-dev-qa-db-fra.com

Next_posts_link () ne fonctionne qu'avec l'original $ wp_query

J'ai un modèle personnalisé que je veux afficher des articles de blog paginés. C'est le début de mon dossier:

$wp_query = new WP_Query($args);
    if($wp_query->have_posts()){
        while($wp_query->have_posts()){ $wp_query->the_post();
            //something...
    <?php next_posts_link('Older Entries'); ?>
    <?php previous_posts_link('Newer Entries'); ?>

Cela fonctionne bien - il affiche les liens OLDER et NEWER quand il le faut. Sur la première page, seul un lien vers les anciennes entrées sera affiché. Sur la deuxième page, les entrées les plus récentes et les plus anciennes, etc.

Mais je ne veux pas écraser le $wp_query... actuel, je veux utiliser, disons, le $wp_query2 pour cette boucle. Et les liens n'apparaissent pas du tout si je le fais.

Selon ceci: http://codex.wordpress.org/Function_Reference/next_posts_link ils affichent un lien vers le groupe de messages précédent/suivant dans la requête en cours. Je suppose que $wp_query2 n'est pas mon "interrogation actuelle", mais $wp_query l'est toujours. Puis-je changer cela en quelque sorte?

UPDATE: L'ajout de &paged=2 manuellement au lien l'oblige à passer correctement à la série de messages suivante (page suivante) et aux deuxième, troisième, etc. page previous_posts_link() fonctionne même si j'utilise $wp_query2. Donc, il ne me manque que la fonctionnalité next_posts_link() sur chaque page.

6
Paul

next_posts_link et previous_posts_link utilisent le $wp_query global.

function get_next_posts_link( $label = null, $max_page = 0 ) {
    global $paged, $wp_query;

http://core.trac.wordpress.org/browser/tags/3.5/wp-includes/link-template.php#L1523

Cela signifie que vous devez faire quelque chose comme ceci pour que ceux-ci fonctionnent correctement.

$orig_query = $wp_query;
$wp_query = new WP_Query($args);
// the rest of your code
$wp_query = $orig_query;

Si vous avez terminé avec $wp_query pour le chargement de cette page, il n'y a aucune raison de le conserver. Il devrait être assez facile de copier ces fonctions principales, de les modifier pour accepter un paramètre de requête et de créer vos propres fonctions de pagination.

9
s_ha_dum

En regardant la source wordpress, il semble que next_posts_link utilise la variable globale var $ paged. Je suppose que cela ne fonctionnera que pour la boucle principale.

Voici une bonne solution pour rendre la pagination efficace pour les boucles secondaires: http://weblogtoolscollection.com/archives/2008/04/19/paging-and-custom-wordpress-loops/

Cela implique de définir explicitement la variable pagée dans la requête, comme ceci:

<h3>Recent Articles</h3>
<ul>
<?php 
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('showposts=5'.'&paged='.$paged);
?>

J'espère que cela pourra aider.

3
Ed Burns