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.
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.
Bonjour Vicken,
Peux-tu poster ton code que je puisse reproduire le bug stp
A+
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 !