web-dev-qa-db-fra.com

WP Requête pour taxonomies variables

Je suis coincé avec ça. Peut-être que c'est simple, peut-être que non. Mais voilà.

Je comprends que la méthode standard pour interroger plusieurs taxonomies dans wordpress est la méthode décrite ici.

https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Cependant, cette méthode ne permet que les taxonomies "codées en dur".

Ce que j'aimerais réaliser est d'exécuter la requête pour plusieurs taxonomies de variables.

Supposons donc que j'ai mon tableau de taxonomies via:

$taxes = get_taxonomies( array('public' => true ) , 'names', 'and' );

Tenter de transmettre directement la variable $taxes ne fonctionne pas car 'taxonomy' n'accepte pas les tableaux. par exemple.

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => $taxes,
            'field'    => 'term_id',
            'terms'    => $terms,
        ),
    ),
);
$query = new WP_Query( $args );

J'ai donc essayé de contourner ce problème en essayant d'abord:

foreach ($taxes as $tax) {
    $the_taxes[] = array (  
        'taxonomy' => $tax,
        'field'    => 'term_id',
        'terms'    => $terms,
    );
}

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
    'relation' => 'OR',
    $the_taxes                  
    ),
);

Cela n’a pas fonctionné, je suppose, car la variable $the_taxes est elle-même un tableau de tableaux. J'ai même essayé de lui donner une version allégée de la sortie du tableau sans le retour à la chaîne array () pour imiter exactement la même sortie que si j'avais suivi la méthode wordpress standard de codage en dur des taxonomies à interroger.

$the_other_taxes = substr(print_r($the_taxes,true),19,-2);
$args = array(
    'post_type' => 'post',
    'tax_query' => array(
    'relation' => 'OR',
        $the_other_taxes                    
    ),
);

Toujours pas de chance ..

Existe-t-il une solution de contournement à ce problème? Est-ce que je manque quelque chose d'évident?

Merci beaucoup, Harry

1
harman

tax_query nécessite un tableau de tableaux, et $the_taxes est un tableau de tableaux, vous avez déjà 99% de votre réponse.

foreach ($taxes as $tax) {
    $the_taxes[] = array (  
        'taxonomy' => $tax,
        'field'    => 'term_id',
        'terms'    => $terms,
    );
}

$the_taxes['relation'] = 'OR';

$args = array(
    'post_type' => 'post',
    'tax_query' => $the_taxes,
);
4
Milo