Ajouter une pagination à vos archives WordPress

Pagination archive WordPress avec paginate_links
WordPress Lecture 8 minutes • 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.


Avis clients

Tibow Webdesign

Tous les avis

Loïc Perrière 6 janvier 2021

Ingénieur de recherches - CNRS / Recommandation LinkedIn
Lors du démarrage de projet de refonte du site web de mon laboratoire, j’ai contacté Thibaut pour obtenir des renseignements sur un travail qu’il avait déjà réalisé auprès d’un autre client.
Sa franchise et la clarté de ses réponses m’ont finalement convaincu de lui confier la conception de deux sites internet. Nos échanges ont toujours été constructifs, et Thibaut a fait preuve, tout au long du développement, de dynamisme et de réactivité, et a également réalisé de nombreuses propositions qui ont majoritairement été retenues. Enfin, il a su faire preuve d’écoute pour intégrer les problématiques et les demandes spécifiques d’un site internet de laboratoire public pour créer un site à notre image.
La collaboration a été fructueuse et constructive, et ça a été un réel plaisir de travailler avec lui.

Clara Deleuze 21 décembre 2020

Principal Chief Executive Officer chez On Divorce / Recommandation LinkedIn
Je collabore avec Thibault depuis plus de 10 ans.
Plus qu'un dev Full Stack c'est un profil au sens logique qui sera vous accompagner plus globalement sur votre projet IT.
Je lui ai confié plus de 5 projets et vous le recommande vivement : réactivité, sens du détail, proactivité...Il sait s'adapter "au métier" pour lequel il intervient et pas uniquement à la fonctionnalité !

Ackeret Mano 22 février 2019

Google Avis
Nous avons fait appel à Thibaut pour développer le site internet de notre entreprise Ackeret Mano, l'année dernière et nous avons été très satisfaits.

C'est un garçon à l'écoute, disponible et sérieux.
Nous vous le recommandons les yeux fermés.

Frédéric Meyrou 19 octobre 2018

Google Avis
Thibaut a repris en main le site du projet de coopérative supercoop.fr et il a parfaitement compris le style et l'énergie qu'il fallait donner au projet donc le site est un vecteur important de communication. Vous pouvez lui faire confiance!

Patrick Chatenet 24 juin 2018

Google Avis
Nous avons travaillé avec Thibaut Soufflet pour finaliser un site Wordpress fait par une autre personne qui était partie vers d'autres horizons professionnels. Il s'est parfaitement adapté, nous a bien écouté et a proposé de très bonnes solutions en termes d'ergonomie et de facilité d'utilisation pour nos clients. A eu à régler des problèmes techniques et a pris le temps de nous trouver les meilleures solutions. Je le conseille vivement!

Anaelle Sorignet 21 mai 2018

Google Avis
Tibow est super efficace, réactif et à l'écoute ! Il nous a concocté un super site. Je recommande vivement de faire appel à lui.

ISOPROM 15 avril 2018

Google Avis
donne de tres bons conseils

Alexis Supiot 5 septembre 2017

Google Avis
Plusieurs projets avec Thibaut et à chaque fois de bons échanges, une facilité dans la compréhension de nos attentes et pour l'ensemble des résultats très satisfaisants sur le rendu. Je recommande vivement et sais que nous aurons d'autres projets ensemble.

Jenny Debaere 1 septembre 2017

Google Avis
Je tiens à mettre en avant les très bonnes compétences techniques de Thibaut, qui a réalisé un travail correspondant totalement à mes attentes.
C'est une personne très attentive et à l'écoute qui saura comprendre votre univers et transposer cela à vos projets. Un autre point fort est sans nul doute sa réactivité et son professionnalisme quant au respect des jalons demandés. Je le recommande très fortement pour vos projets de site. Je n'hésiterai pas à collaborer de nouveau avec lui.

Pierre Arbeille 20 juillet 2016

Google Avis
Thibaut a réalisé le design de mon site, et j'en suis très satisfait. Le design correspondait exactement avec ce que j'avais en tête (mais sans les talents pour le réaliser). Et le délai a été tenu, merci encore !