Comment voir les messages classés en sous – catégories sur la page catégories
Supposons que vous ayez une page de catégorie qui vous demande de voir tous les messages qui appartiennent à cette sous – catégorie. Jusqu’à présent, il n’y a aucun problème: une page de catégorie affiche par défaut tous les messages en ordre décroissant, qu’ils appartiennent directement à la catégorie ou à l’une de ses sous – catégories. Mais il y a un tournant: supposons que vous deviez les afficher comme des noms de sous – catégories (Challenge # 1) et sous chaque nom de sous – catégorie, vous deviez afficher tous ses messages (Challenge # 2).
Permettez – moi de vous donner un exemple pour vous montrer quand vous voulez quelque chose comme ça: par exemple, si vous avez une catégorie principale appelée \
Cet article nous guidera pas à pas vers cet objectif. Avant de commencer, examinons rapidement comment les catégories fonctionnent dans WordPress. Comme indiqué ci – dessus, le comportement par défaut d’une page de catégorie est d’afficher une liste de tous les messages de cette catégorie particulière. Le fichier modèle dans le sujet qui rend la vue de catégorie est la catégorie. Php. Si nous voulons qu’une catégorie apparaisse différemment, nous pouvons l’adresser à l’aide d’un fichier modèle: le nom du fichier commence par le mot catégorie, suivi d’un tiret, suivi du Slug de la catégorie ou de son Id. ce format
Cela est en fait relativement facile parce que nous pouvons passer l’id de catégorie parent dans le champ parent en utilisant la fonction get _ terms (). Vous pouvez voir un exemple dans cette réponse wpse.
Cependant, il est difficile d’obtenir la Sous – catégorie à laquelle chaque article appartient parce que l’objet $post ne relie pas l’article au champ d’identification de la catégorie. Ainsi, pour récupérer un rapport, nous pouvons suivre l’un des deux chemins suivants: parcourir toutes les sous – catégories récupérées dans la section précédente et exécuter la fonction get _ posts () pour chaque sous – catégorie, leur passant l’id de la Sous – catégorie. Ainsi, en utilisant les données de chaque get _ posts (), nous pouvons voir ce dont nous avons besoin. Le principal inconvénient de cette approche est la nécessité d’accéder au DB (bien que get _ posts ()) avec le même nombre d’accès que la Sous – catégorie – moins performant. Le deuxième inconvénient est que cette approche rend le tableau $posts redondant, ce qui est un gaspillage de ressources. Une autre méthode consiste à utiliser l’ID post pour effectuer l’opération inverse et obtenir l’id de sous – catégorie. Cela signifie faire défiler le tableau $posts et utiliser la fonction get _ categories () pour obtenir sa catégorie pour chaque message. C’est très mauvais en soi, parce qu’en supposant que vous ayez au moins quelques dizaines de messages, cela signifie que vous devez visiter DB plus d’une fois. De plus, nous devrions enregistrer les données dans un tableau et les faire défiler pour voir les sous – catégories et leurs messages. Comme ce sont les principales façons d’obtenir de l’information, et que chacune a des problèmes de performance, sans parler du code détaillé à générer, j’ai décidé d’utiliser les requêtes SQL personnalisées les plus concises et les plus performantes.
Maintenant que nous avons un grand plan pour les choses, nous pouvons avoir un aperçu des détails de la mise en œuvre du Code. Inclinaison
Nous avons des données sur les sous – catégories, ni de l’aspect catégorie (il a des sous – catégories et, le cas échéant, qui sont les sous – catégories), ni de l’aspect Post (l’objet post stocké dans la variable globale $posts n’a pas d’attributs qui l’attribuent à une catégorie). Si nous avons besoin d’informations sur les sous – catégories, même les plus triviales, comme leurs noms, nous devons les extraire de la base de données.
Par conséquent, la seule façon d’obtenir des renseignements sur les sous – répertoires est de récupérer la liste des sous – catégories de la catégorie principale du DB et, pour chaque sous – catégorie, la liste des identifiants de poste séparés par des virgules qui lui appartiennent.
Il nous fournira des ensembles de données de ligne pour chaque sous – catégorie, ce qui est plus difficile à faire. Par conséquent, nous l’interrogerons pour obtenir une ligne par sous – catégorie, et la ligne aura une colonne contenant une liste séparée par des virgules d’id de poste. Exemple d’ensemble de résultats de données:
Son élément de liste sera une sous – catégorie.
- L’étape suivante consiste à parcourir l’ensemble de données des sous – catégories que nous avons obtenu de getchildcategories et posts et à voir les données de leurs messages. Mais avant cela, nous devons créer une fonction qui extrait les informations Post du tableau $posts. 4. Chaque itération de la Sous – catégorie d’information sur les messages extraits du tableau $Posts imbriquera une itération sur l’ID du message qui lui appartient. Nous utiliserons cet id de message pour obtenir des informations pertinentes et l’afficherons sous le nom de la Sous – catégorie actuelle. Comment afficherons – nous les informations pour chaque message en fonction de l’ID du message? Comme nous l’avons mentionné au début de cet article, le comportement par défaut des pages de catégorie est de récupérer les messages de catégorie et de les stocker dans un tableau global nommé $posts. Ensuite, nous écrirons une fonction qui passe l’ID du poste et utiliserons la méthode Array _ filter () pour extraire les informations du tableau $posts pour ce poste. Une autre petite méthode que nous allons utiliser est Array _ values () – parce que Array Filter renvoie un élément de tableau, mais n’utilise pas nécessairement l’index 0, nous devons appeler Array values, dont la tâche est de renvoyer toutes les valeurs de tableau et d’indexer le tableau à partir de 0. Nous allons créer Cette fonction dans la classe categories et getcurrentpostfromcategorylist. Nous l’appellerons donc à partir du fichier modèle de notre chat.