web-dev-qa-db-fra.com

WP_Query tax_query sur ACF post_object

J'ai un type de message personnalisé Wine, qui a un Champ ACF qui renvoie à un autre type de message personnalisé Producer en tant que relation post_object. Dans mon producteur, j'ai une taxonomie personnalisée nommée Region.

Ce que j'essaie de faire, c'est d'interroger tous les vins blancs dont la région du producteur est x.

Voici ce que j'ai essayé:

$args = array(
    'post_type' => 'wines',
    'posts_per_page' => 12,
    'tax_query' => array(
        array(
            'taxonomy' => 'type',
            'field' => 'slug',
            'terms' => 'white'
        ),
        array(
            'taxonomy' => 'region',
            'field' => 'slug',
            'terms' => 'alsace'
        )
    )
);

Le problème que j'ai est que le tax_query est exécuté sur le wine et non c'est producer. J'ai consulté la documentation de WP_Query et je n'arrive pas à trouver un exemple pour y parvenir.

Quelqu'un pourrait-il me guider s'il vous plaît? Merci.

Mise à jour 1

J'ai récupéré la liste des identifiants des producteurs pour l'ajouter au meta_query:

$producers = new WP_Query(
    array(
        'post_type' => 'producers',
        'posts_per_page' => -1
    )
);

$producersIds = wp_list_pluck($producers, 'ID');

Après cela, j'ai mis à jour le $args en ajoutant la méta requête:

'meta_query' => array(
    array(
        'key' => 'producer',
        'value' => $producerIds,
        'compare' => 'IN'
    )
)
1
Chin Leung

Mise à jour 1

Comme @Florian l'a souligné, nous n'avons pas besoin d'utiliser la fonction wp_list_pluck, nous pourrions simplement ajouter le 'fields' => 'ids' au WP_Query pour récupérer la liste des identifiants:

$producers = new WP_Query(
    array(
        'fields' => 'ids',
        'post_type' => 'producers',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => 'region',
                'field' => 'slug',
                'terms' => 'alsace'
            )
        )
    )
);

Ensuite, récupérez les vins en remplaçant $ ProducerIdsby $ producteurs-> posts`.

Solution

Tout d'abord, j'ai dû récupérer les producteurs de la région:

$producers = new WP_Query(
    array(
        'post_type' => 'producers',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => 'region',
                'field' => 'slug',
                'terms' => 'alsace'
            )
        )
    )
);

Ensuite, je récupère la liste des identifiants avec wp_list_pluck :

$producerIds = wp_list_pluck($producers->posts, 'ID');

Et enfin, je récupère les vins avec les identifiants des producteurs:

$wines = new WP_Query(
    array(
        'post_type' => 'wines',
        'posts_per_page' => 12,
        'tax_query' => array(
            array(
                'taxonomy' => 'type',
                'field' => 'slug',
                'terms' => 'white'
            )
        ),
        'meta_query' => array(
            array(
                'key' => 'producer',
                'value' => $producerIds,
                'compare' => 'IN'
            )
        )
    )
);
3
Chin Leung