[Total : 1    Moyenne : 5/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.

Créer votre propre Shortcode de bouton en 5 min