Je veux afficher une page d'archive avec pagination qui répertorie toutes les catégories sur mon site, et chaque lien va à cette page d'archive de catégorie particulière. Ce serait donc comme une page d'archive d'archives de catégorie.
Chaque catégorie sur mon site a une miniature personnalisée créée manuellement pour correspondre au permalien de la catégorie. J'ai déjà une configuration de mise en page pour afficher toutes les catégories mais je le fais avec un modèle de page personnalisé, donc il n'y a pas de pagination. Cela signifie que toutes les catégories s'affichent sur une seule page, ce qui est un peu ennuyeux (j'ai plus de 100 catégories).
Mon archive actuelle est configurée avec un nom de modèle de page personnalisé spécifique, page-catlist.php
mais je suis prêt à le remplacer par tout autre type de fichier de modèle.
Voici le code actuel que j'utilise pour afficher toutes les catégories sur une seule page:
$args = array(
'orderby' => 'name',
'order' => 'ASC'
);
$cats = get_categories( $args );
$thm_pre = 'http://example.com/images/thumbs/';
$thm_end = '.png';
foreach($cats as $cat) {
$thumbnail = $thm_pre.$cat->slug.$thm_end;
// output the loop HTML here
// basically a list of category names & thumbs
// all linked to the cat URL by get_category_link()
}
J'espère qu'il y a une meilleure façon de le faire afin que je puisse ajouter une pagination naturelle, idéalement avec WP-PageNavi. Toute aide serait grandement appréciée!
la source
Réponses:
La pagination d'une liste de termes / catégories / balises est assez facile, et pour y parvenir, vous avez besoin d'un minimum d'informations.
Regardons ce dont nous avons besoin
le montant des termes
le nombre de termes par page
get_terms()
( Notez simplement que l'utilisation deget_terms()
a changé dans la version 4.5 ). Vous pouvez également utiliserget_categories()
si vous le souhaitez,get_categories()
est juste une fonction wrapper pourget_terms()
Nous devons donc d'abord compter le nombre de termes. Pour cela, nous utiliserons le
count
paramètre dansget_terms()
REMARQUE:
Tout le code n'est pas testé et nécessite au moins
PHP 5.4
WordPress 4.5
Vous pouvez facilement le convertir pour qu'il fonctionne avec les anciennes versions de PHP et WordPress
Maintenant que nous connaissons le nombre de termes, nous pouvons définir le nombre de termes dont nous avons besoin par page, disons 10
À partir de ce qui précède, nous pouvons maintenant déterminer le nombre de pages que nous aurons. La valeur ici sera transmise à la fonction de pagination requise, dans votre cas, à
wp_pagenavi()
Dans ce cas, vous passeriez
$max_num_pages
à votre fonction de paginationLa prochaine partie serait de calculer notre décalage. Nous voulons uniquement récupérer le nombre de termes pertinents par page pour garder les choses optimisées. Nous n'avons pas besoin de plus de 100 termes par page. Interroger uniquement les 10 nécessaires est beaucoup plus rapide. Donc, nous devons savoir sur quelle page nous sommes, à partir de cela, nous allons calculer un décalage. Ceci sera transmis à
get_terms()
et indiqueraget_terms()
le nombre de termes à ignorer à partir du point de départ initial.Une fois cela fait, il faut aussi dire
get_terms()
de ne renvoyer que 10 termes. Regardons le code de cette pièceVous n'aurez que 10 termes par page selon la pagination. Vous pouvez maintenant simplement parcourir normalement vos conditions
Juste une note, vous voudrez vous assurer que vous avez bien renvoyé les termes de votre
get_terms()
fonction.la source
wp_pagnavi()
fonctionnera vraiment dans ce cas?next_posts_link()
,previous_posts_link()
etpaginate_links()
. Cela fonctionnerait également avec n'importe quelle fonction de pagination où vous pouvez passer une valeur entière à la fonction, comme ma fonction de pagination ici . En ce qui concernewp_pagenavi()
, je ne peux pas dire oui ou non car je n'ai vraiment aucune idée du fonctionnement de cette fonction, vous devrez la tester. Dans mon code ci-dessus,$max_num_pages
contient le nombre de pages, c'est une valeur entière, c'est cette variable que vous devez passer aux fonctions pour calculer la paginationJe ne suis pas familier avec WP-PageNavi, mais je soupçonne qu'il suppose de traiter des publications, il pourrait donc facilement se gâcher si vous l'utilisez sur une boucle comme la vôtre. Peut-être que le CSS pourrait être utile pour styliser votre html. Quoi qu'il en soit, configurer votre propre pagination n'est pas si difficile.
Tout d'abord, vous devez savoir combien de catégories il y a:
Ensuite, vous devez déterminer le nombre d'articles par page que vous souhaitez:
Cela vous donnera le nombre de pages:
La troisième information dont vous avez besoin est la page sur laquelle vous vous trouvez. Vous pouvez garder une trace de cela en introduisant un
query_var
Votre URL ressemblera alors à ceci:www.example.com/yourcatpage?catpage=2
Avant de démarrer la boucle, vous devez savoir quelle page est appelée:
De là, vous pouvez appeler le premier élément que vous souhaitez afficher:
et la dernière:
La dernière page peut contenir moins de
$cats_per_page
catégories, vous devez donc en plus:Maintenant, parcourez les éléments souhaités de
$cats
:Après la boucle, vous pouvez utiliser les variables pour générer des balises précédentes / suivantes ou tout autre type de navigation.
Attention, je n'ai pas réellement testé ce code. J'ai peut-être fait des erreurs en tenant compte du fait que le premier élément d'un tableau a la clé 0.
la source