J'ai 2 types de messages personnalisés «signets» et «extraits» et une «balise» de taxonomie partagée. Je peux générer une liste de tous les termes de la taxonomie avec get_terms (), mais je ne sais pas comment limiter la liste au type de message. Ce que je recherche essentiellement, c'est quelque chose comme ceci:
get_terms(array('taxonomy' => 'tag', 'post_type' => 'snippet'));
Existe-t-il un moyen d'y parvenir? Les idées sont grandement appréciées !!
Oh, je suis sur WP 3.1.1
custom-post-types
custom-taxonomy
terms
Gavin Hewitt
la source
la source
print_r(get_terms_by_post_type(array('category') , array('event') ));
spectaclesWarning: Missing argument 2 for wpdb::prepare()
Il se trouve donc que j'avais besoin de quelque chose comme ça pour un projet sur lequel je travaille. J'ai simplement écrit une requête pour sélectionner tous les messages d'un type personnalisé, puis je vérifie quels sont les termes réels de ma taxonomie qu'ils utilisent.
Ensuite, j'ai obtenu tous les termes de cette taxonomie en utilisant
get_terms()
, puis j'ai utilisé uniquement ceux qui figuraient dans les deux listes, je l'ai enveloppé dans une fonction et j'ai terminé.Mais ensuite, j'avais besoin de plus que des ID: j'avais besoin des noms, j'ai donc ajouté un nouvel argument nommé
$fields
pour pouvoir dire à la fonction quoi renvoyer. Ensuite, je me suis dit que celaget_terms
acceptait de nombreux arguments et ma fonction se limitait à des termes utilisés par un type de message, j'ai donc ajouté une autreif
déclaration et c'est parti:La fonction:
Usage:
Si vous n'avez besoin que d'une liste d'ID de termes, alors:
Si vous avez seulement besoin d'une liste de noms de termes, alors:
Si vous n'avez besoin que d'une liste d'objets de termes, alors:
Et si vous avez besoin d'utiliser des arguments supplémentaires de get_terms comme: orderby, order, hierarchical ...
Prendre plaisir!
Mise à jour:
Pour fixer le nombre de termes à une modification de type de publication spécifique:
à:
la source
(array) $args
au lieu d'une liste de 4 $ vars? Cela vous permettrait de ne pas vous soucier de l'ordre dans lequel vous jetez les arguments, donc quelque chose commeget_terms_by_post_type( $args = array( 'taxonomies', 'args', 'post_type', 'fields' => 'all') )
, puis les appelez à l'intérieur de la fonction avec$args['taxonomies']
. Cela vous aiderait à éviter d'ajouter des valeurs vides et à vous rappeler de l'ordre de vos arguments. Je suggère également d'utiliser des guillemets simples au lieu de doubles. Je les ai vus cinq fois plus rapides.'this is my mood: '.$value
plus"this is my mood: $value"
, en raison de la lisibilité. En ce qui concerne la vitesse: ce n'est pas légèrement - j'ai mesuré jusqu'à cinq fois. Et lorsque vous utilisez des guillemets doubles dans l'ensemble de votre thème partout, ils résumeront rapidement lorsque vous aurez beaucoup de demandes. Quoi qu'il en soit, vous l'avez dit clairement."
vs'
et je me trompais . La différence est bien au-delà de tout ce que quiconque remarquerait.J'ai écrit une fonction qui vous permet de passer
post_type
le$args
tableau à laget_terms()
fonction:HT à @braydon pour avoir écrit le SQL.
la source
Grande question et réponses solides.
J'ai vraiment aimé l'approche de @jessica en utilisant le filtre terms_clauses, car il étend la fonction get_terms de manière très raisonnable.
Mon code est une continuation de son idée, avec quelques sql de @braydon pour réduire les doublons. Il permet également un tableau de post_types:
Parce que get_terms n'a pas de clause pour GROUPY BY, j'ai dû l'ajouter à la fin de la clause WHERE. Notez que la priorité du filtre est très élevée, dans l'espoir qu'elle durera toujours en dernier.
la source
Je n'ai pas pu faire en sorte que les arguments get_terms fonctionnent avec la version de Gavin du code ci-dessus, mais finalement en changeant
à
comme c'était le cas dans la fonction originale de Bainternet.
la source
@Bainternet: Merci! J'ai dû modifier légèrement la fonction car elle ne fonctionnait pas (quelques fautes de frappe). Le seul problème maintenant est que le nombre de termes est désactivé. Le nombre ne prend pas en compte le type de message, donc je ne pense pas que vous puissiez utiliser get_terms () dans ce cas.
EDIT: ajout du ou des correctifs. Mais ça ne marche toujours pas pour moi. Le compte affiche toujours la valeur incorrecte.
la source
print_r(get_terms_by_post_typea(array('event','category','',array()));
celui-ci donneWarning: Invalid argument supplied for foreach()
pour la ligneforeach ($current_terms as $t){
Évitez les doublons:
la source