Comment voir les messages classés en sous catégories sur la page catégories

Supposons que ayez une page de catégorie qui demande de voir tous les messages qui appartiennent à cette sous catégorie. Jusqursquoà présent, il nrsquoy a aucun problème: une page de catégorie affiche par défaut tous les messages en ordre décroissant, qursquoils appartiennent directement à la catégorie ou à lrsquoune de ses sous catégories. Mais il y a un tournant: supposons que deviez les afficher comme des noms de sous catégories (Challenge 1) et sous chaque nom de sous catégorie, deviez afficher tous ses messages (Challenge 2).
Permettez moi de donner un exemple pour montrer quand voulez quelque chose comme ça: par exemple, si 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 drsquoune page de catégorie est drsquoafficher 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. nous voulons qursquoune catégorie apparaisse différemment, nous pouvons lrsquoadresser à lrsquoaide drsquoun fichier modèle: le nom du fichier commence par le mot catégorie, suivi drsquoun 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 lrsquoid 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 drsquoobtenir la Sous catégorie à laquelle chaque article appartient parce que lrsquoobjet $post ne relie pas lrsquoarticle au champ drsquoidentification de la catégorie. Ainsi, pour récupérer un rapport, nous pouvons suivre lrsquoun 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 lrsquoid 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é drsquoaccéder au DB (bien que get _ posts ()) avec le même nombre drsquoaccè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 lrsquoID post pour effectuer lrsquoopération inverse et obtenir lrsquoid 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. Crsquoest très mauvais en soi, parce qursquoen supposant que ayez au moins quelques dizaines de messages, cela signifie que devez visiter DB plus drsquoune 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 drsquoobtenir de lrsquoinformation, et que chacune a des problèmes de performance, sans parler du code détaillé à générer, jrsquoai décidé drsquoutiliser 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 lrsquoaspect catégorie (il a des sous catégories et, le cas échéant, qui sont les sous catégories), ni de lrsquoaspect Post (lrsquoobjet post stocké dans la variable globale $posts nrsquoa pas drsquoattributs qui lrsquoattribuent à une catégorie). nous avons besoin d 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 drsquoobtenir 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. Nous allons utiliser deux tables pour gagner le premier défi: WP _ term taxonomie et WP terms. Le tableau WP _ term taxonomie utilise deux colonnes principales pour stocker des informations sur les relations entre les différentes catégories: parent et term Id. Crsquoest donc le tableau que nous interrogerons pour savoir quelles sous catégories se trouvent dans la catégorie principale. Nous leur enverrons lrsquoid de la catégorie principale en tant que catégorie mère et S électionnerons tous les termes _ ID s (id de la Sous catégorie) dont la colonne mère est lrsquoid de la catégorie principale. Le tableau des termes wp u contient des informations sur chaque catégorie – son nom, ses fentes, etc. Ensuite, en utilisant lrsquoid de terme que nous avons récupéré dans la table de classification WP _ term nous sélectionnerons le nom de la Sous catégorie dans la table WP terms. Le deuxième défi consiste à utiliser le tableau des relations WP _ term relations. Ce tableau comporte une colonne Object _ ID et une colonne term Taxonomy ID, chacune représentant une connexion entre un objet (un message, un fichier média ou une entité de ce type dans WordPress) et un terme qui lui est assigné (qui peut être une catégorie, une étiquette ou une entité de groupe de tout type). Ainsi, théoriquement, nous pouvons interroger le tableau en envoyant lrsquoid de sous catégorie comme terme _ ID s et obtenir tous les messages qui appartiennent à cette sous catégorie. Cependant,
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 lrsquointerrogerons pour obtenir une ligne par sous catégorie, et la ligne aura une colonne contenant une liste séparée par des virgules drsquoid de poste. Exemple drsquoensemble de résultats de données:

Terme _ ID name post id

Janvier

Février

En avant!

Pour ce faire, nous allons grouper les termes _ ID s en utilisant la fonction Groupe par MySQL et nous allons également utiliser la fonction Groupe concat qui va créer une liste drsquoobjets ID s s éparés par des virgules (ou tout autre délimiteur que choisissez). (2) leur nom et (3) une liste drsquoidentifiants de poste appartenant à chaque catégorie. Saisissez une fonction appelée getchildccategories and posts: $$chilldcategories = $wpdb gt get _ Results (
Je vais entrer au bout du Bureau de poste. 3. Dans cette section, la fonction est appelée à partir drsquoun fichier modèle que nous appellerons à partir drsquoun fichier Modèle créé pour cette catégorie particulière. Nous créons un fichier PHP en utilisant class Slug (par exemple, si class Slug est main cat, alors notre nom de fichier sera category-main-cat.php). Ce fichier est utilisé par WordPress lorsque l’utilisateur accède à cette page de catégorie (voir un exemple de hiérarchie de modèles de catégorie ou un aperçu visuel de la hiérarchie de modèles). Dans ce fichier, nous créerons un élément

238.

451755, 450433, 452135, 451991, 451944, 452169

241.

452295, 452421, 450619, 452410, 452402

233.

451702, 448953, 451685, 445431

Son élément de liste sera une sous catégorie.