WordPress a la fonction the_posts_navigation
depuis la version 4.1.0. Mais je ne sais pas comment utiliser avec wp_query
ou get_posts
. le code suivant est dans un fichier modèle de page.
méthode wp_query:
<?php
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} else if ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
$get_posts=new wp_query('post_type=case&posts_per_page=2&paged='.$paged);
while($get_posts->have_posts()):$get_posts->the_post();
the_title();
endwhile;
the_posts_pagination( array(
'prev_text' => __( 'Previous page', 'cm' ),
'next_text' => __( 'Next page', 'cm' ),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'cm' ) . ' </span>',
) );
?>
Méthode get_posts:
<?
while(have_posts()):the_post();
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} else if ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
$case_posts=get_posts('post_type=case&posts_per_page=2&paged='.$paged);
echo '<pre>';
print_r($case_posts);
echo '</pre>';
foreach($case_posts as $case_post){
echo $case_post->post_title;
}
endwhile;
// Previous/next page navigation.
the_posts_pagination( array(
'prev_text' => __( 'Previous page', 'cm' ),
'next_text' => __( 'Next page', 'cm' ),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'cm' ) . ' </span>',
) );
?>
Ils ne fonctionnent pas et affichent la pagination, mais entrer http://127.0.0.1/gdboer/?page_id=74&page=2 manuellement dans la barre d’adresse, cela fonctionne. Qui peut m'aider, merci beaucoup!
the_posts_navigation()
est simplement une fonction wrapper pour get_the_posts_navigation()
qui est simplement une fonction wrapper pour paginate_links
. Les deux premières fonctions utilisent les mêmes paramètres que ceux utilisés par paginate_links
et les transmettent également à la dernière fonction.
get_the_posts_navigation()
et the_posts_navigation()
sont de bonnes nouvelles fonctions car elles éliminent beaucoup de codage personnalisé et sont plus conviviales pour les nouveaux utilisateurs inexpérimentés qui souhaitent des liens de pagination numérotés.
La seule faille dans cette get_the_posts_navigation()
est que les développeurs ont encapsulé la fonction paginate_links
dans une instruction conditionnelle qui indique que si la requête principale ($wp_query
) contient moins d'une page (rappelez-vous, la première page est 0
et la deuxième page est 2
), ne montre pas les liens. Ceci est problématique pour les requêtes personnalisées sur les modèles de page. Les pages auront toujours une seule page, donc ces fonctions ne fonctionnent pas avec les requêtes personnalisées
La seule solution valable si vous devez utiliser the_posts_navigation()
, consiste à utiliser la réponse @ChipBennet dans this post . Je n'aime vraiment pas annuler la requête principale (assez malin, à mon avis, cela revient à utiliser query_posts
) mais je ne vois pas d'autre solution permettant à get_the_posts_navigation()
de fonctionner avec des requêtes personnalisées.
J'ai un modèle personnalisé et j'ai eu du mal à montrer le composant de pagination pendant des heures. voici ce qui a fonctionné pour moi.
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' => 3,
'orderby' => 'menu_order',
'order'=> 'ASC',
'paged'=>$paged,
'post_type' => 'projects'
);
$projects = new WP_Query($args);
<!-- working example of pagination with numbers -->
...<?php endwhile;?>
<?php
$GLOBALS['wp_query']->max_num_pages = $projects->max_num_pages;
the_posts_pagination( array(
'mid_size' => 1,
'prev_text' => __( 'Back', 'green' ),
'next_text' => __( 'Onward', 'green' ),
'screen_reader_text' => __( 'Posts navigation' )
) ); ?>
OR
<!-- working example of pagination without numbers -->
...<?php endwhile;?>
<?php next_posts_link( 'next', $projects->max_num_pages ); ?>
<?php previous_posts_link('prev') ?>
Cette fonction utilise le get_the_posts_pagination()
qui utilise GLOBAL wp_query
pour configurer la fonction paginate_links()
. Je pense donc que cela ne fonctionne pas pour get_posts
.
Essayez d'utiliser la fonction paginate_links()
seule ou la fonction posts_nav_link()
PS: Assurez-vous d'utiliser wp_reset_query()