Non, il n'est pas possible de classer par taxonomie, car d'un certain point de vue, cela n'a pas vraiment de sens.
Les taxonomies sont des moyens de regrouper des éléments. Donc, l’intérêt d’avoir une taxonomie sur les postes serait vraiment d’avoir des termes dans cette taxonomie partagés entre les postes. Si une taxonomie comportait des termes qui n'étaient utilisés que sur un seul poste, cela rendrait la taxonomie inutile. Et si les termes étaient partagés comme ils devraient l'être, alors commander par celui-ci ne produirait rien de particulièrement utile.
Ce que vous devriez utiliser dans une telle situation est le post méta. Vous pouvez commander par la poste méta, et c'est unique à chaque poste.
Edit: Cela dit, vous pouvez commander par taxonomie en faisant une requête SQL personnalisée à l'aide d'un filtre. Vous ne pouvez pas le faire depuis un WP_Query non modifié: http://scribu.net/wordpress/sortable-taxonomy-columns.html
Cependant, si vous devez recourir à ce type de processus, la structure de conception de vos données est erronée. Les "termes" dans la taxonomie ne sont pas des "données" réelles. Les termes eux-mêmes n'ont aucune signification inhérente, ils sont simplement des étiquettes pour le groupe particulier qu'ils décrivent. Si vous les traitez comme des données significatives, vous avez un défaut de conception sous-jacent.
Les taxonomies regroupent les choses en leur attribuant des termes. Ce groupement est l’essentiel des taxonomies, les termes sont simplement de jolis visages sur le groupement. Si vous devez affecter des métadonnées significatives à une publication, vous devriez plutôt utiliser la méta de publication correspondante. Et que vous pouvez commander par, car post meta utilise à la fois des clés et des valeurs pour stocker des informations. Avec une taxonomie, vous ne stockez réellement que des clés, leurs valeurs étant les posts regroupés par ce terme.
Les choses sont plus faciles à long terme si vous utilisez la bonne approche. Bien que je ne dis pas que vous ne pouvez pas faire quelque chose d'étrange avec la taxonomie, vous ne faites que rendre les choses plus difficiles pour vous-même à long terme en les utilisant mal.
La réponse acceptée pour cette question est inacceptable. Il est illogique de supposer qu'une commande par taxe "n'a pas de sens". La réponse qu'il a donnée n'a pas de sens.
Pensez à avoir un type de message de menu. Ensuite, vous avez une taxe personnalisée de "FoodCategories". La taxe FoodCategories comprend les termes "Petit déjeuner", "Déjeuner" et "Dîner". Si vous soumettez une requête en utilisant le paramètre tax_query, vous avez maintenant un ensemble de résultats avec tous les termes, mais ils sont classés par date de publication.
Afin d’en obtenir le bon ordre, par rapport à leurs termes, puis d’être affichés au début du système en séparant les publications dans leurs différentes catégories, vous devez parcourir le jeu de résultats, puis interroger chaque publication dans la liste. jeu de résultats pour trouver ses termes et les comparer au terme actuel, filtrer dans un tableau et continuer tout au long. Ensuite, vous devez à nouveau parcourir le nouveau tableau pour l'affichage. Ce n'est pas productif.
Ce serait bien si WP avait l'option "tax__in" orderby comme "post__in", mais comme ce n'est pas le cas, vous devez également suivre le processus ridicule ci-dessus; personnalisez vous-même la requête à l'aide des filtres 'posts_orderby' et 'posts_join' afin d'ajuster la méthode orderby et d'ajouter le terme au jeu de résultats, respectivement; ou vous devez créer une nouvelle requête pour chaque terme que vous filtrez dans les sections html par rapport à ces termes.
Le plus efficace serait de changer la chaîne de requête au moyen de filtres. Le plus simple serait de faire trois requêtes distinctes. L'API WP devrait gérer les commandes par taxe ou tout paramètre de requête restrictif. Si vous limitez une requête en fonction de certaines conditions, il est fort probable que beaucoup auront besoin de passer commande selon ces mêmes conditions.
la source
Oui, mais c'est assez impliqué ...
Ajoutez à functions.php dans votre thème:
C'est frankensteined de certains trucs trouvés et des trucs que j'ai faits moi-même. Expliquer est assez difficile, mais le résultat final est que vous pouvez exécuter? Orderby = (requête de taxonomie var) & order = ASC (ou DESC) et elle décollera immédiatement!
la source
add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 );
enadd_filter('posts_clauses', 'todo_tax_clauses', 10, 2 );
Merci :)Je viens en retard au jeu ici, mais il existe un moyen plus simple et plus WordPressy de le faire.
Construisez votre requête fiscale comme d'habitude.
Configurez vos arguments pour query_posts ou WP_Query
Avant de passer votre appel query_posts / WP_Query, connectez-vous au filtre orderby et remplacez-le.
n'oubliez pas de retirer le filtre par la suite ...
cela fonctionne car c / tax_query crée les jointures, etc. pour vous, il vous suffit de commander par l’un des champs de la jointure.
la source
Eh bien, j'aimerais exposer mon expérience dans le tri des types d'articles personnalisés par catégorie / taxonomie.
LA TOILE
L'AFFAIRE
Dans les pages de liste de catégories d'archives, le client souhaitait que les articles soient triés par
LES MARCHES
Tout d’abord , j’attrape la requête de la requête de la page d’archive non modifiée qui se présentait de la manière suivante:
Deuxièmement , j'ai modifié le code SQL dans Sequel Pro par rapport à la base de données pour répondre à mes besoins. Je viens avec cela (oui, probablement, cela peut être amélioré: mes connaissances sur MySQL ne sont pas exceptionnelles):
Troisièmement , j'ai lié la requête au fichier functions.php avec trois filtres: posts_fields, posts_join et posts_orderby
Le code dans functions.php:
Enfin, j'ai déclenché les filtres du hook pre_get_post en fonction de certaines conditions.
J'espère que cela peut aider quelqu'un
la source
J'ai eu un problème très similaire que j'ai traité: je veux commander une archive de type post personnalisé (articles de magazines) par une taxonomie personnalisée (questions). Je ne fais jamais de requêtes SQL directes sur mon site - et généralement si vous êtes comme ces autres réponses - vous devez repenser votre approche.
PROBLÈMES:
1) Wordpress ne vous permet pas de commander des taxonomies de manière intelligente.
2) Wordpress ne permet tout simplement pas
orderby
d’utiliser des taxonomies sur des post-types WP_Query (comme l’a expliqué Otto).SOLUTIONS:
1) Le meilleur moyen de trier les taxonomies consiste à utiliser le plugin Custom Taxonomy Order NE pour le moment. Il vous permet de commander la taxonomie via WYSIWYG,
wp-admin
ce qui n’est pas ce que je ferais mais je n’ai rien trouvé de mieux.Lorsque vous installez le plugin, vous obtiendrez quelque chose de similaire à ce que j'ai fait ici. Prenez note de l'option
Auto-sort Queries of this Taxonomy
- définissez ceci surCustom Order as Defined Above
; cela vous donne la commande dont vous avez besoin. Capture d'écran:2) Avec une taxonomie triée en place, vous pouvez désormais créer une série d'appels WP_Query qui passent par chaque terme, créant ainsi une archive ordonnée par la taxonomie. Utilisez
get_terms()
pour créer un tableau de toutes les conditions fiscales, puis passez enforeach
revue chaque terme. Cela crée unWP_Query
élément pour chaque terme qui renvoie tous les articles pour un terme donné, créant ainsi une archive classée par terme de taxonomie. Code pour y arriver:Lecture connexe sur ce site: affiche tous les articles d'un type d'article personnalisé, regroupés par une taxonomie personnalisée.
la source
Je ne suis pas sûr de savoir pourquoi toutes les solutions proposées ici surpassent assez. OK, il y a une demi-décennie, mais j'utilise actuellement le code suivant et cela fonctionne:
Cela va trier les taxonomies de votre CPT en fonction de sa taxonomie par ordre alphabétique et au sein de ces groupes de taxonomie ainsi que par ordre alphabétique.
la source
Voici la solution que j'ai utilisée pour ce problème particulier. Cette solution est destinée aux cas extrêmes où il n'est pas possible d'utiliser un
pre_get_posts
filtre et qu'il y a une pagination existante sur la requête (par exemple: WooCommerce):J'ai utilisé cela pour créer un menu de navigation classé par taxonomie, terme et nombre de messages par terme.
Si vous voulez simplement les articles, changez la requête en
SELECT p.*
etGROUP BY p.ID
la source
C'est comme une requête avant la requête, mais cela ne dérange pas si nous n'interrogeons pas trop de publications ... L'idée est de modifier la requête principale de manière à ce que nous n'ayons même pas besoin d'aller aux modèles et de générer de nouvelles requêtes. boucles...
la source