web-dev-qa-db-fra.com

Comment puis-je ajouter plusieurs tableaux 'tax_query' via une boucle?

J'essaie de créer des fonctionnalités (à l'aide du plugin Advanced Custom Fields) pour répertorier les informations dans un modèle de page pour tous les types de publication personnalisés ("Produit") qui ont des taxonomies spécifiées.

Ceci est mon code stable actuel, qui interroge les produits, mais uniquement sur la base des termes de taxonomie que je coder en dur:

$posts = get_posts(array(
    'posts_per_page'    => 10,
    'post_type'         => 'company_product',
    'tax_query' => array(
            array(
                'taxonomy' => 'taxonomy',
                'field' => 'slug',
                'terms' => 'product1'
            ),
));

J'ai utilisé ACF pour configurer des fonctionnalités dans le backend pour sélectionner plusieurs taxonomies (via un champ répéteur) que je souhaite appliquer à la requête, afin que l'administrateur puisse modifier les produits renvoyés en fonction des taxonomies dont ils disposent.

J'ai essayé ceci:

$posts = get_posts(array(
    'posts_per_page'    => 10,
    'post_type'         => 'company_product',
    'tax_query' => array(
        if( have_rows('category_taxonomies') ):
            while ( have_rows('category_taxonomies') ) : the_row();
                    array(
                        'taxonomy' => 'taxonomy',
                        'field' => 'slug',
                        'terms' => the_sub_field('category_taxonomy')
                    ),
            endwhile;
        endif;
));

Mais reçu cette erreur: Parse error: syntax error, unexpected 'if' (T_IF), expecting ')' in...

Comme vous pouvez le voir, j'essaie d'ajouter un tableau à tax_query pour chaque taxonomie sélectionnée dans le backend, mais essayer de mettre les fonctions if/while à l'intérieur du tableau lui-même provoque une erreur.

J'ai supposé que la méthode ci-dessus ne fonctionnerait pas, mais PHP n'est pas mon expertise donc je ne sais pas où aller à partir d'ici. Toute aide est appréciée.

1
LCW

OK, je n'ai aucune idée de comment et pourquoi votre code devrait fonctionner ... Il n'a rien en commun avec la bonne syntaxe PHP ... Mais c'est un très bon pseudo-code, donc je pense que je peux devinez, ce que vous vouliez réaliser ...

$tax_query = array();
if ( have_rows('category_taxonomies') ) {
    while ( have_rows('category_taxonomies') ) {
        the_row();
        $tax_query[] = array(
            'taxonomy' => 'taxonomy',  // <- you should put real taxonomy name in here
            'field' => 'slug',
            'terms' => get_sub_field('category_taxonomy')
        );
    }
}

$posts = get_posts( array(
    'posts_per_page' => 10,
    'post_type'      => 'company_product',
    'tax_query'      => $tax_query
));
2
Krzysiek Dróżdż