web-dev-qa-db-fra.com

Comment combiner tax_query et date_query dans Wordpress

J'utilise la requête suivante pour extraire tous les produits qui ne font pas partie de la catégorie de produits "Service" et pour les commander par un méta-champ personnalisé "_vintage_age".

$q->set( 'tax_query', array(array(
    'taxonomy' => 'product_cat',
    'field' => 'slug',
    'terms' => array( 'Service' ),  
    'operator' => 'NOT IN'
)));

$q->set('meta_query',array(array(
    'vtp_age' => array(
    'key' => '_vintage_age',
    'value' => array(1,2,3),
    'compare' => 'IN'
))));

$q->set('orderby',array(
    'vtp_age' => 'ASC',
    'date' => 'ASC'
));

Je dois maintenant étendre cette requête aux produits EXCLUDE qui ont été modifiés avec la catégorie product_category 'Vendu' il y a plus d'un mois (c'est-à-dire tous les produits non vendus, non servis et tous les produits vendus le mois dernier). Mon hypothèse est d'utiliser quelque chose comme ceci, mais comment puis-je l'appliquer uniquement aux produits "Vendus" ET l'ajouter à ma requête initiale?

array(
    'date_query' => array(
        array(
            'column' => 'post_modified_gmt',
            'after'  => '1 month ago',
        ),
))

Merci d'avance pour votre aide!

1
Richard Tinkler

Je crains qu'il n'y ait aucun moyen de faire de telles requêtes avancées en utilisant WP_Query.

Bien sûr, vous pouvez toujours obtenir ce résultat, mais vous devrez écrire un peu plus de code.

Il y a deux solutions:

Il est difficile de vous donner un code précis, car votre question ne contient pas beaucoup de détails, mais cela suffira peut-être :)

1. Utilisez les filtres posts_where et posts_join

Si vous n'avez pas peur d'écrire vos propres requêtes SQL, vous pouvez utiliser les filtres posts_where et posts_join pour ajouter des conditions SQL plus avancées à votre WP_Query.

2. Utilisez un second WP_Query, puis excluez ces publications.

Si vous n'aimez pas le SQL brut, vous pouvez utiliser un second WP_Query. Utilisez-le pour sélectionner toutes les publications que vous souhaitez exclure. Ensuite, vous pouvez utiliser leurs ID et les transmettre en tant que post__not_in param à votre WP_Query actuel - de cette façon, vous les excluez.

2
Krzysiek Dróżdż