web-dev-qa-db-fra.com

Comment puis-je taxonomiser les termes en termes de termes ils sont utilisés?

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

  • seize (utilisé sur 3 postes)
  • vingt-sept (utilisé sur 0 postes)
  • trente-quatre (utilisé sur 12 postes)

eye_color taxonomie

  • Bleu (utilisé sur 5 postes)
  • Brown (utilisé sur 10 postes)
  • Vert (utilisé sur 0 posts)

Mon désir est d'obtenir une liste de tous les termes dans eye_color qui:

  1. avoir des messages
  2. sont utilisés à côté de thirty-four sur un ou plusieurs posts

Bien 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?

1
Pete

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,

1
Bordoni