web-dev-qa-db-fra.com

La pagination WP_Query ne fonctionne pas dans la zone d'administration

J'ai créé une page de plugin personnalisée. Sur cette page, je liste les publications en utilisant wp_query () . Ça fonctionne bien. Je souhaite ajouter une pagination, mais cela ne fonctionne pas, même si j'utilise le code fourni dans codex :

<?php
// set the "paged" parameter 
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

// the query
$the_query = new WP_Query( 'posts_per_page=2&paged=' . $paged ); 

if ( $the_query->have_posts() ) :

// the loop
while ( $the_query->have_posts() ) : $the_query->the_post(); 

the_title(); 
endwhile;

// next_posts_link() usage with max_num_pages
next_posts_link( 'Older Entries', $the_query->max_num_pages );
previous_posts_link( 'Newer Entries' );

// clean up after the query and pagination
wp_reset_postdata(); 

else:  
echo 'Sorry, no posts matched your criteria.';
endif; ?>

En cliquant sur le lien de pagination, il charge une nouvelle page avec les mêmes messages. Pourquoi cela ne fonctionne-t-il pas dans la zonewp-admin?

2
Christine Cooper

Milo a noté qu'il n'y a pas d'objet $wp_query dans la page wp-admin, nous pouvons donc obtenir $paged via:

$paged = ( $_GET['paged'] ) ? $_GET['paged'] : 1;

Maintenant que nous avons $paged, nous pouvons coder notre propre pagination. Je vais vous montrer comment, dans sa forme la plus simple.

Commençons par un maximum de pages de pagination:

$max_pages = $the_query->max_num_pages;

Puis calcule la page suivante:

$nextpage = $paged + 1;

Enfin, créons notre lien de pagination. Nous effectuons une instruction if simple pour vérifier si $max_pages est supérieur à $paged:

if ($max_pages > $paged) {
    echo '<a href="admin.php?page=plugin-page.php&paged='. $nextpage .'">Load More Topics</a>';
}

C'est aussi simple que ça.

Mettre à jour

Pour activer la page précédente, vous pouvez simplement ajouter:

$prevpage = max( ($paged - 1), 0 ); //max() will discard any negative value
if ($prevpage !== 0) {
   echo '<a href="admin.php?page=plugin-page.php&paged='. $prevpage .'">Previous page</a>';
}
3
Christine Cooper