[Total : 5 Moyenne : 3.4/5]
Il existe plusieurs façons de configurer la pagination dans un thème WordPress. Une méthode populaire implique l’utilisation du plugin WP-PageNavi. Ce plugin est idéal pour les néophytes du développement WordPress, mais nombreux sont les développeurs de thèmes qui préfèrent éviter l’utilisation d’un plugin pour réaliser une fonction si primaire.
Paginate_links : Une fonction pour les Paginer toutes !
WordPress propose nativement une fonction injustement méconnue qui permet de créer une pagination pour vos archives : archive de custom posts, taxonomie, catégorie, tag et résultats de recherche : la fonction paginate_links ()
Pagination dans archive.php
Commençons simplement par appliquer cette fonction à un exemple concret, la page archive.php classique. Celle qui regroupe tous vos articles WordPress.
Veillez au préalable à ajuster le nombre d’articles à afficher via l’administration de WordPress : Réglages > Lecture > « Les pages du site doivent afficher au plus »
<?php
/**
* Exemple basique d'une page archive.php avec pagination
*/
get_header(); ?>
<div class="wrap">
<section id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php // 1- Boucle WordPress pour appeler tous les articles
if ( have_posts() ) : ?>
<?php while ( have_posts() ) :
the_post();?>
<h2><?php the_title();?></h2>
<?php the_post_thumbnail();?>
<p><?php the_excerpt();?></p>
<?php endwhile; ?>
<?php // 2- Appel de la fonction paginate_links
global $wp_query;
$big = 999999999;
echo paginate_links( array( // Plus d'info sur les arguments possibles : https://codex.wordpress.org/Function_Reference/paginate_links
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages
) );
?>
<?php else : ?>
<p>Aucun article à afficher</p>
<?php endif; ?>
</div>
</section>
</div>
<?php
get_footer();
Ajouter une pagination à archive.php grâce à la fonction paginate_links()
Pagination dans une archive de custom posts
Le code suivant s’applique pour les archives personnalisées de custom post types (archive-monexemple.php). Par exemple, si vous avez créé un post type « recettes » alors voici comment tous les afficher sur leur page d’archive « archive-recettes.php », avec la pagination de 5 articles par page.
<?php
/**
* archive-recettes.php
* Exemple basique d'une page archive personnalisée avec pagination
* Archive affichant tous les customs posts "Recettes"
*/
get_header(); ?>
<div class="wrap">
<section id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php // 1- Création d'une requête personnalisée appelant les articles personnalisés Recette
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
$args = array(
'posts_per_page' => 5,
'post_type' => 'recette',
'paged' => $paged,
);
$query_recettes = new WP_Query( $args );
?>
<?php // 2- Boucle classique pour appeler les articles correspondants à a requête précédente
if ( $query_recettes->have_posts() ) : ?>
<?php while ( $query_recettes->have_posts() ) :
the_post();?>
<h2><?php the_title();?></h2>
<?php the_post_thumbnail();?>
<p><?php the_excerpt();?></p>
<?php endwhile; ?>
<?php // 3- Appel de la fonction paginate_links
$big = 999999999;
echo paginate_links( array( // Plus d'info sur les arguments possibles : https://codex.wordpress.org/Function_Reference/paginate_links
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $the_query->max_num_pages
) );
//Fin de la fonction paginate_links
?>
<?php else : ?>
<p>Aucun article à afficher</p>
<?php endif; ?>
</div>
</section>
</div>
<?php
get_footer();
Pagination d'une archive personnalisée avec paginate_links()
Pagination dans une page category personnalisée
Pour une categorie personnalisée, le code est quasi le même que pour une archive personnalisée. Il suffit d’appeler « category_name » au lieu « post_type » et de préciser le nom de la catégorie voulue.
Exemple : je souhaite afficher tous les articles de la catégorie « surf » avec la pagination de 8 articles par page.
<?php
/**
* category-surf.php
* Exemple basique d'une page category personnalisée avec pagination
* Page affichant tous les articles classés dans la catégorie "Surf", à raison de 8 par page
*/
get_header(); ?>
<div class="wrap">
<section id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php // 1- Création d'une requête personnalisée appelant les articles personnalisés Recette
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
$args = array(
'posts_per_page' => 8,
'category_name' => 'surf',
'paged' => $paged,
);
$query_surf = new WP_Query( $args );
?>
<?php // 2- Boucle classique pour appeler les articles correspondants à a requête précédente
if ( $query_surf->have_posts() ) : ?>
<?php while ( $query_surf->have_posts() ) :
the_post();?>
<h2><?php the_title();?></h2>
<?php the_post_thumbnail();?>
<p><?php the_excerpt();?></p>
<?php endwhile; ?>
<?php // 3- Appel de la fonction paginate_links
$big = 999999999;
echo paginate_links( array( // Plus d'info sur les arguments possibles : https://codex.wordpress.org/Function_Reference/paginate_links
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $the_query->max_num_pages
) );
//Fin de la fonction paginate_links
?>
<?php else : ?>
<p>Aucun article à afficher</p>
<?php endif; ?>
</div>
</section>
</div>
<?php
get_footer();
Pagination d'une category personnalisée avec paginate_links()
Pour aller plus loin
Ce code peut-être adapté très facilement à des tags, taxonomy et page de résultats de recherche. En général, vous n’aurez qu’à ajuster la requête à l’étape 1.
L’appel de la fonction de pagination s’appelle toujous de la même manière :
<?php // 3- Appel de la fonction paginate_links
$big = 999999999;
echo paginate_links( array( // Plus d'info sur les arguments possibles : https://codex.wordpress.org/Function_Reference/paginate_links
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $the_query->max_num_pages
) );
//Fin de la fonction paginate_links
?>
Fonction de pagination WordPress paginate_links()
Ce tuto vous a sauvé la mise ? Vous connaissez d’autres techniques ? Partagez vos astuces en commentaires !
Rejoignez-nous sur Facebook pour d’autres tutoriels gratuits réguliers
Tibow Webdesign vous propose aussi ses services de conseils et de création sur-mesure pour WordPress. Devis et conseils gratuits ici.
Alex
21 Mar 2020 -
Bonjour,
je le vois un peu partout mais je n’ai jamais compris son utilité : à quoi sert $big, concrètement ? Lorsque je ne mets ni $big ni le paramètre ‘base’, j’ai l’impression que ça fonctionne tout aussi bien. Il existe des cas où ne pas l’avoir peut poser problème ?
Merci, à plus !
Vicken Khatcherian
18 Jan 2020 -
Bonjour,
J’essaye justement de faire une pagination dans une archive de custom posts mais le code que vous montrez sur votre site ne marche pas sur le mien, comme si une boucle infinie faisait buguer le navigateur. Et dans le cas où ça marche qu’est-ce qui est censé s’afficher ensuite ?
Merci beaucoup pour vos explications et bonne continuation.
Tibow Webdesign
1 Fév 2020 -
Bonjour Vicken,
Peux-tu poster ton code que je puisse reproduire le bug stp
A+