M é m o - l a b .
WordPress propose des fonctions dédiées à l’intégration d’un système de pagination.
Notions abordeées : previous_posts_link(), next_posts_link(), posts_nav_link(), the_posts_navigation(), the_posts_pagination() , previous_post_link(), next_post_link().
Lorsque l’on souhaite n’intégrer qu’un certain nombre de contenus par page, il est nécessaire d’utiliser un système de pagination permettant de naviguer entre les différentes pages.
L’utilisation des fonctions previous_posts_link()
et next_posts_link()
offrent la possibilité de gérer séparément les liens « précédents » et « suivants ».
Les fonctions the_posts_navigation()
, posts_nav_link()
et the_posts_pagination()
offrent un système de pagination intégrant les 2 liens.
La particularité de la fonction the_posts_pagination()
réside dans le fait qu’elle affiche un système de pagination intégrant les numéros de page.
Les fonctions previous_post_link()
et next_post_link()
permettent respectivement d’accéder au précedent article et à l’article suivant.
La compréhension par le code
Navigation entre pages
Cas de la loop WordPress
<!-- Dans un template php -->
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<p><?php the_content(); ?></p>
<?php endwhile; endif; ?>
<?php
previous_posts_link('« Page précedente'); ?> -- <?php next_posts_link('Page suivante »');
?>
Navigation entre pages
Cas de la loop WordPress personnalisée
<!-- Dans un template php -->
<?php
// $current_page_num représente le numéro de la page courante
$current_page_num = (get_query_var('page')) ? get_query_var('page') : 1;
$q = new WP_Query([
'post_type' => 'post',
// Nbre de posts par page à afficher
'posts_per_page' => 3,
'paged' => $current_page_num
]);
?>
<?php
if ($q->have_posts()) :
while ($q->have_posts() ) : $q->the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<p><?php the_content(); ?></p>
<?php endwhile; ?>
<?php
// Pagination
if (function_exists(my_pagination)) {
// $q->max_num_pages représente le nombre total de pages
// calculé en fonction du paramètre post_per_pages de la requète
my_pagination($q->max_num_pages, $current_page_num);
}
// Clean up after the query and pagination.
wp_reset_postdata();
?>
<?php endif; ?>
<!-- Dans functions.php -->
<?php
function my_pagination($total_number_pages, $current_page_num) {
// Réglages de la pagination
$paginate_links = paginate_links([
// retourne l'url de base de la page
'base' => get_pagenum_link(1) .'%_%',
// Format de l'url lors de la navigation .../page/x
'format' => 'page/%#%',
// Nombre total de pages
'total' => $total_number_pages,
// Numéro de la page courante
'current' => $current_page_num,
// Affichage des liens précédents et suivants
'prev_next' => True,
// Le lien précédent
'prev_text' => __('«'),
// Le lien suivant
'next_text' => __('»')
]);
// Affichage de la pagination
if ($paginate_links) {
$html = '<nav>';
$html .= 'page ' .$current_page_num .' / ' .$total_number_pages;
$html .= '<br>';
$html .= $paginate_links;
$html .= '</nav>';
echo $html;
}
}
?>
Navigation entre articles
<!-- Dans un template php -->
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<p><?php the_content(); ?></p>
<?php endwhile; endif; ?>
<?php
next_post_link('%link', '« %title '); ?> | <?php previous_post_link('%link', '%title »');
?>