Comment puis-je obtenir tous les termes d'une taxonomie unique comportant un ou plusieurs termes spécifiques?
Par exemple, supposons que j'ai les taxonomies suivantes. Les termes sont répertoriés sous les taxonomies, et la parenthèse indique qu'ils comportent de nombreux messages.
âge taxonomie
eye_color taxonomie
Mon désir est d'obtenir une liste de tous les termes dans eye_color
qui:
thirty-four
sur un ou plusieurs postsBien sûr, je sais que get_terms () a un argument hide_empty
, mais cela ne représente que la moitié de ce que je veux.
UPDATE: Un commentaire ci-dessous renvoie à une fonction qui vous permet de trouver des termes basés sur les termes frères d'une même taxonomie ... mais j'aimerais trouver des termes basés sur des termes frères de plusieurs taxonomies.
En clair, je voudrais fondamentalement:
Sélectionnez tous les termes de taxonomy A
qui sont utilisés sur une publication avec à la fois Term 1 from Taxonomy B
et Term 2 from Taxonomy C
.
Des idées?
Donc, ma solution à ce type de problèmes, pour lesquels nous avons un ensemble de règles très complexe, consiste à éviter de modifier le code SQL juste pour ma solution, car si vous devez l'expliquer à un débutant, il devient poilu.
Ma solution:
function get_term_union( $taxonomy, $tax_query, $post_type = 'post' ){
$args = array(
'post_type' => $post_type,
'tax_query' => $tax_query,
'fields' => 'ids',
);
$posts = new WP_Query( $args );
$terms = array();
foreach( $posts as $post_id ){
$terms = array_merge( $terms, wp_get_post_terms( $post_id, $taxonomy, array( 'fields' => 'ids' ) ) );
}
$terms = array_unique( $terms );
return $terms;
}
// Usage
$tax_query = array(
'relation' => 'AND',
array(
'taxonomy' => 'taxonomy_B',
'field' => 'slug',
'terms' => 'term_A',
),
array(
'taxonomy' => 'taxonomy_C',
'field' => 'slug',
'terms' => 'term_B',
),
);
// This will return you all the term id's for `taxonomy_A`
var_dump( get_term_union( 'taxonomy_A', $tax_query ) );
Si cette solution ne correspond pas à vos besoins, dites-le-moi et j'essaierai de la réparer.
Mes meilleures salutations,