WordPress Pagination un guide d'introduction

Dans cet article / tutoriel, nous examinerons les bases de la pagination WordPress, la configuration de la pagination par défaut et la manière de l'améliorer..


Le schéma de pagination par défaut

Je vais utiliser le thème par défaut de WordPress Twenty Eleven comme référence. Même si vous ne l'utilisez pas, vous le trouverez dans votre répertoire de thèmes..

Messages par page

N'oubliez pas qu'en matière de pagination, WordPress doit savoir combien d'éléments doivent être répertoriés sur chaque page. Cette valeur est définie dans la page Admin -> Paramètres -> Paramètres de lecture..

La valeur "Pages de blog au maximum" sera utilisée par WordPress sauf si vous la remplacez, par exemple lors de l'utilisation d'une requête personnalisée..

Le code de pagination par défaut

Un exemple typique d’affichage d’une liste de publications est la visualisation de toutes les publications d’une catégorie. L'affichage des publications de catégorie est géré par le fichier de modèle category.php. Pour le thème Twenty Eleven, la page de catégorie confie l'affichage de la pagination à une fonction appelée vingt-dix-neuf_content_nav, qui se trouve dans functions.php..

 function twentyeleven_content_nav ($ nav_id) global $ wp_query; si ($ wp_query-> max_num_pages> 1):?>   

Le code ci-dessus aurait tout aussi bien pu être inclus directement dans category.php, mais les concepteurs de Twenty Eleven ont décidé d’en faire une fonction permettant de l’appeler à partir de nombreux fichiers modèles. La plupart du code est destiné à la mise en page et à l'internationalisation, mais voici ce qu'il fait:

  • en utilisant la valeur de la variable de requête globale $ wp_query-> max_num_pages, nous vérifions si nous avons plus d'une page; cela évite d'afficher tout le bloc de pagination s'il n'y a qu'une seule page de messages
  • la fonction WordPress next_posts_link affiche un lien vers la page suivante de publications et accepte un argument facultatif pour le texte de lien personnalisé
  • De même, la fonction WordPress previous_posts_link affiche un lien vers la page précédente de posts

Et voici à quoi ça va ressembler avec un réglage de deux posts par page.

C'est assez basique mais fonctionnel. Les problèmes avec cet affichage sont qu’il n’ya aucun moyen de savoir quelle page vous êtes, ou combien de pages au total.

Une chose à retenir sur les listes de publication par défaut de WordPress est qu’elles fonctionnent dans l’ordre inverse:

Comme les requêtes sur les messages sont généralement triées dans l'ordre chronologique inverse, next_posts_link () pointe généralement sur les entrées les plus anciennes (vers la fin de la série) et prev_posts_link () pointe généralement sur les nouvelles entrées (vers le début de la série)..

Ce comportement peut être modifié si vous créez une requête personnalisée. Notez que dans l'exemple ci-dessus, deux blocs de pagination ont été utilisés: un avant le début de la boucle de post et un après. Il est toujours agréable d'avoir une pagination en haut et en bas pour que l'utilisateur n'ait pas à faire défiler trop.

Exemples:

Pour afficher "Aller à la page suivante…" lorsque vous liez du texte:

 next_posts_link ('Aller à la page suivante…');

Pour afficher une image au lieu d'un texte:

 $ previous_posts_image = ''; previous_posts_link ($ previous_posts_image);

Alternative

Il existe une alternative à l'utilisation des fonctions séparées next_posts_link et previous_posts_link, la fonction posts_nav_link. Fondamentalement, cette fonction génère les liens précédent et suivant d’un coup, avec des arguments optionnels pour le texte et le séparateur de liens..

La sortie par défaut:

 posts_nav_link ();

Et avec un texte de lien personnalisé et un séparateur:

 posts_nav_link (':::', '<< Newer Posts', 'Older Posts >> ');

Je suggère d'utiliser les fonctions séparées next_posts_link et previous_posts_link car elles vous permettent de mieux contrôler l'emplacement de vos liens et de rendre votre code plus compréhensible..


Messages individuels de pagination

Lors de l'affichage de messages uniques, il est agréable d'afficher un lien vers les messages précédents et suivants de la séquence. Le fichier de modèle single.php le gère avec le code suivant:

 

Cela vous donnera ceci:

Ce sont les fonctions next_post_link et previous_post_link qui produisent les liens de pagination en haut à droite. Ces fonctions acceptent quelques paramètres qui nous permettent de personnaliser leur sortie très bien. Les paramètres sont:

next_post_link (format, lien, in_same_cat, exclus_categories);

Les paramètres de format et de lien fonctionnent ensemble. Le format correspond à la manière dont vous souhaitez que le lien apparaisse:% link dans le format est utilisé comme espace réservé pour le contenu du paramètre link, qui correspond au texte que nous souhaitons utiliser pour le lien. Donc ça:

 previous_post_link ('% link', '<< Next Newest Post' ); next_post_link( '%link', 'Next Oldest Post >> ');

Nous donnerait ceci:

Si nous voulions afficher le titre réel du message suivant ou précédent, nous utiliserions la valeur spéciale% title dans le paramètre link. Donc ça:

 previous_post_link ('% link', '<< Previous Post: %title' ); next_post_link( '%link', 'Next Post: %title >> ');

Nous donnerait ceci:

Les paramètres restants vous permettent de vous assurer que le prochain article lié à est dans la même catégorie et d'exclure certaines catégories. Consultez la documentation comme liée ci-dessus.

Vous pouvez afficher une image pour le lien comme:

 $ previous_post_link_image = ''; previous_post_link ('% link', $ previous_post_link_image);

Une meilleure solution

Aussi faciles que soient les méthodes ci-dessus, elles sont également limitées. Heureusement, WordPress nous donne la fonction paginate_links. Cela nous permet de créer un véritable ensemble de liens de pagination, tels que:

Vous trouverez ci-dessous le code qui produit la pagination ci-dessus. Regardons ce qu'il fait.

 global $ wp_query; $ total_pages = $ wp_query-> max_num_pages; if ($ total_pages> 1) $ current_page = max (1, get_query_var ('paginé')); echo paginate_links (array ('base' => get_pagenum_link (1). '% _%', 'format' => '/ page /% #%', 'current' => $ current_page, 'total' => $ total_pages ,)); 
  • globaliser l'objet wp_query afin que nous puissions récupérer la valeur max_num_pages: il s'agit du nombre total de pages renvoyées par la requête
  • trouver la page en cours en récupérant la variable 'paginée' avec get_query_var: nous utilisons la fonction max pour que la page en cours ait la valeur 1 par défaut
  • la fonction paginate_links prend un tableau de paramètres: les quatre plus importants sont affichés
  • récupère l'URL de base de la page avec la fonction get_pagenum_link et y ajoute le modèle% _% qui sera remplacé par le paramètre format, next
  • dans notre cas, spécifiez un modèle de format conforme à la manière dont apparaissent de jolis permaliens (définis avec% postname% dans Admin -> Paramètres -> Permaliens): le% _% dans le paramètre de base sera remplacé par ceci
  • définir les pages actuelles et totales comme précédemment récupérées

L'URL des résultats paginés utilisant de jolis permaliens ressemblera à ceci:

http://2011.rosselliot.co.nz/category/honda/page/2/

L’appel get_pagenum_link (1) va récupérer cette partie de l’URL:

http://2011.rosselliot.co.nz/category/honda/

Nous fournissons ensuite un paramètre de format pour le reste de l'URL, à savoir:

page 2

La partie% #% du format contient notre numéro de page actuel

Sur la base de cet ensemble de paramètres, paginate_links générera un ensemble de liens de pagination. Vous pouvez insérer le code directement dans un fichier de modèle gérant la pagination (tel que category.php) ou l'enregistrer en tant que fonction dans votre fichier functions.php, puis l'appeler à partir de tout modèle de votre choix..

paginate_links a d’autres paramètres qui vous permettent d’adapter le résultat, l’apparence des chiffres et le contenu des étiquettes. Consultez la documentation. Avec un peu de style, il est facile de créer un affichage de pagination impressionnant. Avec ce code modifié et son style ajouté:

 global $ wp_query; $ total_pages = $ wp_query-> max_num_pages; if ($ total_pages> 1) $ current_page = max (1, get_query_var ('paginé')); écho '
'; echo paginate_links (array ('base' => get_pagenum_link (1). '% _%', 'format' => '/ page /% #%', 'current' => $ current_page, 'total' => $ total_pages , 'prev_text' => 'Prev', 'next_text' => 'Next')); écho '
';
 .page_nav .page-numbers padding: 4px 8px; marge: 0px 4px; bordure: 1px gris uni; couleur: # FFB134;  .page_nav .current border: 1px solid # FFB134; couleur de fond: #FBEFDB;  .page_nav .prev, .page_nav .next border: none; Couleur bleue; 

Il était facile de produire ceci:

J'espère que vous avez apprécié ce guide d'introduction à la pagination. Avez-vous d'autres conseils sur la pagination avec WordPress? Faites-nous savoir dans les commentaires ci-dessous.