WordPress
5 mai 2018
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.