{"id":690,"date":"2010-11-02T23:27:24","date_gmt":"2010-11-02T21:27:24","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=690"},"modified":"2015-03-02T14:56:32","modified_gmt":"2015-03-02T13:56:32","slug":"une-pagination-wordpress-personnalisee-sans-plugin","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/une-pagination-wordpress-personnalisee-sans-plugin","title":{"rendered":"Une pagination WordPress personnalis\u00e9e sans plugin"},"content":{"rendered":"<p>Cette \u00ab\u00a0solution\u00a0\u00bb dans la cat\u00e9gorie <strong>Les tutoriels<\/strong> du site va faire un peu t\u00e2che, car je ne vais pas r\u00e9ellement expliquer tout le fonctionnement du code. D&rsquo;o\u00f9 le rangement de l&rsquo;article dans la cat\u00e9gorie <strong>Ressources<\/strong>. Vous allez me dire que \u00e7a fait le deuxi\u00e8me pr\u00e9sent\u00e9 ainsi, et&#8230; oui en effet.<!--more--><br \/>\nMais l&rsquo;avantage du blog, c&rsquo;est que si vous ne comprenez pas tout le contenu de l&rsquo;article, vous pouvez toujours me demander des explications en guise de commentaires (et moi \u00e7a me fait gagner un peu de temps).<\/p>\n<h2>L&rsquo;id\u00e9e<\/h2>\n<p>WordPress propose une gestion de la pagination assez basique avec un lien \u00ab\u00a0pr\u00e9c\u00e9dent\u00a0\u00bb et un lien \u00ab\u00a0suivant\u00a0\u00bb.<br \/>\nC&rsquo;est d\u00e9j\u00e0 \u00e7a me direz-vous.<br \/>\nCependant, une pagination un peu plus \u00e9volu\u00e9e permet tout de m\u00eame une meilleure navigation sur un site.<\/p>\n<p><img decoding=\"async\" class=\"alignright size-full wp-image-720\" title=\"Logo du site de Steve Taylor\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2010\/11\/pagination-developpeur-wordpress.png\" alt=\"\" width=\"282\" height=\"70\" \/>En naviguant sur quelques bons blogs (cf. <strong>sources et liens utiles<\/strong> de cet article), j&rsquo;ai trouv\u00e9 des codes int\u00e9ressants mais pas toujours adapt\u00e9s \u00e0 ce que je souhaitais obtenir.<br \/>\nD&rsquo;ailleurs, m\u00eame ce code n&rsquo;est pas encore assez bien, je souhaiterais pouvoir limiter le nombre de liens affich\u00e9s. En effet, vous imaginez un blog avec plus de 30 pages d&rsquo;articles, si tous les liens devaient s&rsquo;afficher, \u00e7a serait un peu envahissant.<\/p>\n<h2>Le code<\/h2>\n<p>Je vous invite \u00e0 placer ce code \u00e0 la suite de votre fichier <strong>functions.php<\/strong> qui doit normalement se trouver \u00e0 la racine de votre th\u00e8me WordPress. Si ce n&rsquo;est pas le cas, cr\u00e9ez simplement le fichier.<\/p>\n<pre class=\"code\"><code class=\"language-php\">function pagination($query) {  \r\n\t\r\n\t$baseURL=\"http:\/\/\".$_SERVER['HTTP_HOST'];\r\n\tif($_SERVER['REQUEST_URI'] != \"\/\"){\r\n\t\t$baseURL = $baseURL.$_SERVER['REQUEST_URI'];\r\n\t}\r\n \r\n\t\/\/ Suppression de '\/page' de l'URL\r\n\t$sep = strrpos($baseURL, '\/page\/');\r\n\tif($sep != FALSE){\r\n\t\t$baseURL = substr($baseURL, 0, $sep);\r\n\t}\r\n \r\n  \/\/ Suppression des param\u00e8tres de l'URL\r\n\t$sep = strrpos($baseURL, '?');\r\n\tif($sep != FALSE){\r\n\t\/\/ On supprime le caract\u00e8re avant qui est un '\/'\r\n\t\t$baseURL = substr($baseURL, 0, ($sep-1));\r\n\t}\t\r\n\t\r\n\t$page = $query-&gt;query_vars[\"paged\"];  \r\n\tif ( !$page ) $page = 1;  \r\n\t$qs = $_SERVER[\"QUERY_STRING\"] ? \"?\".$_SERVER[\"QUERY_STRING\"] : \"\";  \r\n\t\r\n\t\/\/ N\u00e9cessaire uniquement si on a plus de posts que de posts par page admis \r\n\tif ( $query-&gt;found_posts &gt; $query-&gt;query_vars[\"posts_per_page\"] ) {  \r\n\t\techo '&lt;ul class=\"pagination\"&gt;'; \r\n\t\t\/\/ lien pr\u00e9c\u00e9dent si besoin\r\n\t\tif ( $page &gt; 1 ) { \r\n\t\t\techo '&lt;li class=\"next_prev prev\"&gt;&lt;a title=\"Revenir \u00e0 la page pr\u00e9c\u00e9dente (vous \u00eates \u00e0 la page '.$page.')\" href=\"'.$baseURL.'\/page\/'.($page-1).'\/'.$qs.'\"&gt;\u00ab pr\u00e9c\u00e9dente&lt;\/a&gt;&lt;\/li&gt;'; \r\n\t\t} \r\n\t\t\/\/ la boucle pour les pages\r\n\t\tfor ( $i=1; $i &lt;= $query-&gt;max_num_pages; $i++ ) { \r\n\t\t\t\/\/ ajout de la classe active pour la page en cours de visualisation\r\n\t\t\tif ( $i == $page ) { \r\n\t\t\t\techo '&lt;li class=\"active\"&gt;&lt;a href=\"#pagination\" title=\"Vous \u00eates sur cette page '.$i.'\"&gt;'.$i.'&lt;\/a&gt;&lt;\/li&gt;'; \r\n\t\t\t} else { \r\n\t\t\t\techo '&lt;li&gt;&lt;a title=\"Rejoindre la page '.$i.'\" href=\"'.$baseURL.'\/page\/'.$i.'\/'.$qs.'\"&gt;'.$i.'&lt;\/a&gt;&lt;\/li&gt;'; \r\n\t\t\t} \r\n\t\t} \r\n\t\t\/\/ le lien next si besoin\r\n\t\tif ( $page &lt; $query-&gt;max_num_pages ) { \r\n\t\t\techo '&lt;li class=\"next_prev next\"&gt;&lt;a title=\"Passer \u00e0 la page suivante (vous \u00eates \u00e0 la page '.$page.')\" href=\"'.$baseURL.'\/page\/'.($page+1).'\/'.$qs.'\"&gt;suivante \u00bb&lt;\/a&gt;&lt;\/li&gt;'; \r\n\t\t} \r\n\t\techo '&lt;\/ul&gt;';  \r\n\t}  \r\n}<\/code><\/pre>\n<p><img decoding=\"async\" class=\"alignright size-full wp-image-721\" title=\"\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2010\/11\/pagination.png\" alt=\"Une image pr\u00e9sentant une pagination\" width=\"190\" height=\"70\" \/>Ce code consid\u00e8re que vous avez d\u00e9j\u00e0 utilis\u00e9 l&rsquo;url-rewriting de WordPress pour \u00ab\u00a0enjoliver\u00a0\u00bb vos permaliens. Si ce n&rsquo;est pas le cas, je vous invite \u00e0 le faire dans vos r\u00e9glages de blog (<em>Admin &gt; R\u00e9glages &gt; Permaliens<\/em>) et \u00e0 choisir la forme qui vous semble la plus adapt\u00e9e \u00e0 vos besoins (personnellement j&rsquo;utilise <code>\/%category%\/%postname%<\/code>, mais nous nous \u00e9cartons du sujet).<\/p>\n<p>Une fois que cette fonction est enregistr\u00e9e, il vous suffit de l&rsquo;appeler \u00e0 l&#8217;emplacement m\u00eame o\u00f9 vous souhaitez voir appara\u00eetre la pagination :<\/p>\n<pre class=\"code\"><code class=\"language-php\">&lt;?php \r\n   pagination($wp_query);\r\n?&gt;<\/code><\/pre>\n<p><a title=\"En apprendre plus que wp_query (nouvelle fen\u00eatre)\" href=\"http:\/\/codex.wordpress.org\/Function_Reference\/WP_Query\" target=\"_blank\"><code>$wp_query<\/code><\/a> permet d&rsquo;obtenir des informations qui d\u00e9finissent une requ\u00eate en cours. C&rsquo;est elle qui va nous permettre de savoir sur quelle page on se trouve, et combien de pages il y a en tout.<br \/>\n\u00c0 ne pas omettre donc !<\/p>\n<h2>Suggestions d&rsquo;am\u00e9lioration<\/h2>\n<p>Des am\u00e9liorations sont envisageables pour \u00e9viter la surabondance de liens de pagination. L&rsquo;une d&rsquo;elles serait de planquer les liens en trop avec JavaScript (les cacher et les faire d\u00e9filer ?).<br \/>\nUne autre serait de limiter le nombre de liens affich\u00e9s dans la pagination en affichant par exemple la premi\u00e8re, la derni\u00e8re, et les deux pages (p+1 et p-1) avoisinant la page active (affich\u00e9e).<\/p>\n<p>J&rsquo;y travaille et vous livre cela d\u00e8s que j&rsquo;ai un r\u00e9sultat probant \ud83d\ude09<\/p>\n<p>Amusez-vous bien !<\/p>\n<div class=\"sources\">\n<h2>Sources et liens utiles :<\/h2>\n<ul>\n<li><a title=\"Le blog de Johan Bleuzen avec un article sur une pagination avanc\u00e9e (nouvelle fen\u00eatre)\" href=\"http:\/\/blog.johanbleuzen.fr\/pagination-avancee-wordpress-sans-plugin\" target=\"_blank\">http:\/\/blog.johanbleuzen.fr\/pagination-avancee-wordpress-sans-plugin<\/a><\/li>\n<li><a title=\"blog de Steve Taylor (nouvelle fen\u00eatre- anglais)\" href=\"http:\/\/sltaylor.co.uk\/blog\/better-wordpress-pagination\/\" hreflang=\"en\">http:\/\/sltaylor.co.uk\/blog\/better-wordpress-pagination\/<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Cette \u00ab\u00a0solution\u00a0\u00bb dans la cat\u00e9gorie Les tutoriels du site va faire un peu t\u00e2che, car je ne vais pas r\u00e9ellement expliquer tout le fonctionnement du code. D&rsquo;o\u00f9 le rangement de l&rsquo;article dans la cat\u00e9gorie Ressources. Vous allez me dire que \u00e7a fait le deuxi\u00e8me pr\u00e9sent\u00e9 ainsi, et&#8230; oui en effet.<\/p>\n","protected":false},"author":4,"featured_media":719,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[50,9,13],"tags":[232,58,51],"coauthors":[597],"class_list":["post-690","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ressources-telechargements","category-tutoriels","category-wordpress","tag-pagination","tag-personnalisable","tag-plugin"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=690"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/690\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/719"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=690"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}