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"
[pastacode lang="php" manual="%3C%3Fphp%0A%2F**%0A%20*%20Exemple%20basique%20d'une%20page%20archive.php%20avec%20pagination%0A%20*%2F%0Aget_header()%3B%20%3F%3E%0A%3Cdiv%20class%3D%22wrap%22%3E%0A%0A%09%3Csection%20id%3D%22primary%22%20class%3D%22content-area%22%3E%0A%09%09%3Cdiv%20id%3D%22content%22%20class%3D%22site-content%22%20role%3D%22main%22%3E%0A%0A%09%09%09%3C%3Fphp%20%2F%2F%201-%20Boucle%20WordPress%20pour%20appeler%20tous%20les%20articles%0A%09%09%09if%20(%20have_posts()%20)%20%3A%20%3F%3E%0A%0A%09%09%09%09%3C%3Fphp%20while%20(%20have_posts()%20)%20%3A%0A%09%09%09%09%09the_post()%3B%3F%3E%0A%09%09%09%09%09%3Ch2%3E%3C%3Fphp%20the_title()%3B%3F%3E%3C%2Fh2%3E%0A%09%09%09%09%09%3C%3Fphp%20the_post_thumbnail()%3B%3F%3E%0A%09%09%09%09%09%3Cp%3E%3C%3Fphp%20the_excerpt()%3B%3F%3E%3C%2Fp%3E%0A%09%09%09%09%3C%3Fphp%20endwhile%3B%20%3F%3E%0A%0A%09%09%09%09%3C%3Fphp%20%2F%2F%202-%20Appel%20de%20la%20fonction%20paginate_links%0A%09%09%09%09%09global%20%24wp_query%3B%0A%0A%09%09%09%09%09%24big%20%3D%20999999999%3B%20%0A%0A%09%09%09%09%09echo%20paginate_links(%20array(%20%2F%2F%20Plus%20d'info%20sur%20les%20arguments%20possibles%20%20%3A%20https%3A%2F%2Fcodex.wordpress.org%2FFunction_Reference%2Fpaginate_links%0A%09%09%09%09%09%09'base'%20%3D%3E%20str_replace(%20%24big%2C%20'%25%23%25'%2C%20esc_url(%20get_pagenum_link(%20%24big%20)%20)%20)%2C%0A%09%09%09%09%09%09'format'%20%3D%3E%20'%3Fpaged%3D%25%23%25'%2C%0A%09%09%09%09%09%09'current'%20%3D%3E%20max(%201%2C%20get_query_var('paged')%20)%2C%0A%09%09%09%09%09%09'total'%20%3D%3E%20%24wp_query-%3Emax_num_pages%0A%09%09%09%09%09)%20)%3B%0A%09%09%09%09%09%0A%09%09%09%09%3F%3E%0A%09%09%09%09%09%09%0A%09%09%09%3C%3Fphp%20else%20%3A%20%3F%3E%0A%09%09%09%09%3Cp%3EAucun%20article%20%C3%A0%20afficher%3C%2Fp%3E%0A%09%09%09%3C%3Fphp%20endif%3B%20%3F%3E%0A%0A%09%09%3C%2Fdiv%3E%0A%09%3C%2Fsection%3E%0A%3C%2Fdiv%3E%0A%0A%3C%3Fphp%0Aget_footer()%3B" message="Ajouter une pagination à archive.php grâce à la fonction paginate_links() " highlight="" provider="manual"/]

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.
[pastacode lang="php" manual="%3C%3Fphp%0A%2F**%0A%20*%20archive-recettes.php%0A%20*%20Exemple%20basique%20d'une%20page%20archive%20personnalis%C3%A9e%20avec%20pagination%0A%20*%20Archive%20affichant%20tous%20les%20customs%20posts%20%22Recettes%22%0A%20*%2F%0Aget_header()%3B%20%3F%3E%0A%3Cdiv%20class%3D%22wrap%22%3E%0A%0A%09%3Csection%20id%3D%22primary%22%20class%3D%22content-area%22%3E%0A%09%09%3Cdiv%20id%3D%22content%22%20class%3D%22site-content%22%20role%3D%22main%22%3E%0A%09%09%09%3C%3Fphp%20%2F%2F%201-%20Cr%C3%A9ation%20d'une%20requ%C3%AAte%20personnalis%C3%A9e%20appelant%20les%20articles%20personnalis%C3%A9s%20Recette%0A%09%09%09%09%24paged%20%3D%20(%20get_query_var(%20'paged'%20)%20)%20%3F%20absint(%20get_query_var(%20'paged'%20)%20)%20%3A%201%3B%0A%0A%09%09%09%09%24args%20%3D%20array(%0A%09%09%09%09%09'posts_per_page'%20%3D%3E%205%2C%0A%09%09%09%09%09'post_type'%20%3D%3E%20'recette'%2C%0A%09%09%09%09%09'paged'%20%3D%3E%20%24paged%2C%0A%09%09%09%09)%3B%0A%0A%09%09%09%09%24query_recettes%20%3D%20new%20WP_Query(%20%24args%20)%3B%0A%09%09%09%09%3F%3E%0A%0A%0A%09%09%09%3C%3Fphp%20%2F%2F%202-%20Boucle%20classique%20pour%20appeler%20les%20articles%20correspondants%20%C3%A0%20a%20requ%C3%AAte%20pr%C3%A9c%C3%A9dente%0A%09%09%09if%20(%20%24query_recettes-%3Ehave_posts()%20)%20%3A%20%3F%3E%0A%0A%09%09%09%09%3C%3Fphp%20while%20(%20%24query_recettes-%3Ehave_posts()%20)%20%3A%0A%09%09%09%09%09the_post()%3B%3F%3E%0A%09%09%09%09%09%3Ch2%3E%3C%3Fphp%20the_title()%3B%3F%3E%3C%2Fh2%3E%0A%09%09%09%09%09%3C%3Fphp%20the_post_thumbnail()%3B%3F%3E%0A%09%09%09%09%09%3Cp%3E%3C%3Fphp%20the_excerpt()%3B%3F%3E%3C%2Fp%3E%0A%09%09%09%09%3C%3Fphp%20endwhile%3B%20%3F%3E%0A%0A%09%09%09%09%3C%3Fphp%20%2F%2F%203-%20Appel%20de%20la%20fonction%20paginate_links%0A%09%09%09%09%09%24big%20%3D%20999999999%3B%0A%0A%09%09%09%09%09echo%20paginate_links(%20array(%20%2F%2F%20Plus%20d'info%20sur%20les%20arguments%20possibles%20%3A%20https%3A%2F%2Fcodex.wordpress.org%2FFunction_Reference%2Fpaginate_links%0A%09%09%09%09%09%09'base'%20%3D%3E%20str_replace(%20%24big%2C%20'%25%23%25'%2C%20esc_url(%20get_pagenum_link(%20%24big%20)%20)%20)%2C%0A%09%09%09%09%09%09'format'%20%3D%3E%20'%3Fpaged%3D%25%23%25'%2C%0A%09%09%09%09%09%09'current'%20%3D%3E%20max(%201%2C%20get_query_var('paged')%20)%2C%0A%09%09%09%09%09%09'total'%20%3D%3E%20%24the_query-%3Emax_num_pages%0A%09%09%09%09%09)%20)%3B%20%0A%09%09%09%09%2F%2FFin%20de%20la%20fonction%20paginate_links%0A%09%09%09%3F%3E%20%0A%09%09%09%09%09%09%0A%09%09%09%3C%3Fphp%20else%20%3A%20%3F%3E%0A%09%09%09%09%3Cp%3EAucun%20article%20%C3%A0%20afficher%3C%2Fp%3E%0A%09%09%09%3C%3Fphp%20endif%3B%20%3F%3E%0A%09%09%3C%2Fdiv%3E%0A%09%3C%2Fsection%3E%0A%3C%2Fdiv%3E%0A%0A%3C%3Fphp%0Aget_footer()%3B" message="Pagination d'une archive personnalisée avec paginate_links()" highlight="" provider="manual"/]

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.
[pastacode lang="php" manual="%3C%3Fphp%0A%2F**%0A%20*%20category-surf.php%0A%20*%20Exemple%20basique%20d'une%20page%20category%20personnalis%C3%A9e%20avec%20pagination%0A%20*%20Page%20affichant%20tous%20les%20articles%20class%C3%A9s%20dans%20la%20cat%C3%A9gorie%20%22Surf%22%2C%20%C3%A0%20raison%20de%208%20par%20page%0A%20*%2F%0Aget_header()%3B%20%3F%3E%0A%3Cdiv%20class%3D%22wrap%22%3E%0A%0A%09%3Csection%20id%3D%22primary%22%20class%3D%22content-area%22%3E%0A%09%09%3Cdiv%20id%3D%22content%22%20class%3D%22site-content%22%20role%3D%22main%22%3E%0A%09%09%09%3C%3Fphp%20%2F%2F%201-%20Cr%C3%A9ation%20d'une%20requ%C3%AAte%20personnalis%C3%A9e%20appelant%20les%20articles%20personnalis%C3%A9s%20Recette%0A%09%09%09%09%24paged%20%3D%20(%20get_query_var(%20'paged'%20)%20)%20%3F%20absint(%20get_query_var(%20'paged'%20)%20)%20%3A%201%3B%0A%0A%09%09%09%09%24args%20%3D%20array(%0A%09%09%09%09%09'posts_per_page'%20%3D%3E%208%2C%0A%09%09%09%09%09'category_name'%20%3D%3E%20'surf'%2C%0A%09%09%09%09%09'paged'%20%3D%3E%20%24paged%2C%0A%09%09%09%09)%3B%0A%0A%09%09%09%09%24query_surf%20%3D%20new%20WP_Query(%20%24args%20)%3B%0A%09%09%09%09%3F%3E%0A%0A%0A%09%09%09%3C%3Fphp%20%2F%2F%202-%20Boucle%20classique%20pour%20appeler%20les%20articles%20correspondants%20%C3%A0%20a%20requ%C3%AAte%20pr%C3%A9c%C3%A9dente%0A%09%09%09if%20(%20%24query_surf-%3Ehave_posts()%20)%20%3A%20%3F%3E%0A%0A%09%09%09%09%3C%3Fphp%20while%20(%20%24query_surf-%3Ehave_posts()%20)%20%3A%0A%09%09%09%09%09the_post()%3B%3F%3E%0A%09%09%09%09%09%3Ch2%3E%3C%3Fphp%20the_title()%3B%3F%3E%3C%2Fh2%3E%0A%09%09%09%09%09%3C%3Fphp%20the_post_thumbnail()%3B%3F%3E%0A%09%09%09%09%09%3Cp%3E%3C%3Fphp%20the_excerpt()%3B%3F%3E%3C%2Fp%3E%0A%09%09%09%09%3C%3Fphp%20endwhile%3B%20%3F%3E%0A%0A%09%09%09%09%3C%3Fphp%20%2F%2F%203-%20Appel%20de%20la%20fonction%20paginate_links%0A%09%09%09%09%09%24big%20%3D%20999999999%3B%0A%0A%09%09%09%09%09echo%20paginate_links(%20array(%20%2F%2F%20Plus%20d'info%20sur%20les%20arguments%20possibles%20%3A%20https%3A%2F%2Fcodex.wordpress.org%2FFunction_Reference%2Fpaginate_links%0A%09%09%09%09%09%09'base'%20%3D%3E%20str_replace(%20%24big%2C%20'%25%23%25'%2C%20esc_url(%20get_pagenum_link(%20%24big%20)%20)%20)%2C%0A%09%09%09%09%09%09'format'%20%3D%3E%20'%3Fpaged%3D%25%23%25'%2C%0A%09%09%09%09%09%09'current'%20%3D%3E%20max(%201%2C%20get_query_var('paged')%20)%2C%0A%09%09%09%09%09%09'total'%20%3D%3E%20%24the_query-%3Emax_num_pages%0A%09%09%09%09%09)%20)%3B%20%0A%09%09%09%09%2F%2FFin%20de%20la%20fonction%20paginate_links%0A%09%09%09%3F%3E%20%0A%09%09%09%09%09%09%0A%09%09%09%3C%3Fphp%20else%20%3A%20%3F%3E%0A%09%09%09%09%3Cp%3EAucun%20article%20%C3%A0%20afficher%3C%2Fp%3E%0A%09%09%09%3C%3Fphp%20endif%3B%20%3F%3E%0A%09%09%3C%2Fdiv%3E%0A%09%3C%2Fsection%3E%0A%3C%2Fdiv%3E%0A%0A%3C%3Fphp%0Aget_footer()%3B" message="Pagination d'une category personnalisée avec paginate_links()" highlight="" provider="manual"/]
 

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 :
[pastacode lang="php" manual="%3C%3Fphp%20%2F%2F%203-%20Appel%20de%20la%20fonction%20paginate_links%0A%09%09%09%09%09%24big%20%3D%20999999999%3B%0A%0A%09%09%09%09%09echo%20paginate_links(%20array(%20%2F%2F%20Plus%20d'info%20sur%20les%20arguments%20possibles%20%3A%20https%3A%2F%2Fcodex.wordpress.org%2FFunction_Reference%2Fpaginate_links%0A%09%09%09%09%09%09'base'%20%3D%3E%20str_replace(%20%24big%2C%20'%25%23%25'%2C%20esc_url(%20get_pagenum_link(%20%24big%20)%20)%20)%2C%0A%09%09%09%09%09%09'format'%20%3D%3E%20'%3Fpaged%3D%25%23%25'%2C%0A%09%09%09%09%09%09'current'%20%3D%3E%20max(%201%2C%20get_query_var('paged')%20)%2C%0A%09%09%09%09%09%09'total'%20%3D%3E%20%24the_query-%3Emax_num_pages%0A%09%09%09%09%09)%20)%3B%20%0A%09%09%09%09%2F%2FFin%20de%20la%20fonction%20paginate_links%0A%09%09%09%3F%3E" message="Fonction de pagination WordPress paginate_links()" highlight="" provider="manual"/]
 
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.


Si cet article vous a aidé, lâchez votre plus bel applaudissement en remerciement ! 🤗