webentwicklung-frage-antwort-db.com.de

So kombinieren Sie tax_query und date_query in Wordpress

Mit der folgenden Abfrage extrahiere ich alle Produkte, die nicht in der Produktkategorie "Service" enthalten sind, und ordne sie nach einem benutzerdefinierten Metafeld "_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'
));

Ich muss diese Abfrage jetzt auf EXCLUDE-Produkte erweitern, die vor mehr als einem Monat mit der product_category 'Verkauft' geändert wurden (dh alle nicht verkauften, nicht gewarteten Produkte und alle im letzten Monat verkauften Produkte anzeigen). Ich rate, so etwas zu verwenden, aber wie wende ich dies nur auf "Verkaufte" Produkte an UND füge es meiner ursprünglichen Abfrage hinzu?

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

Vielen Dank im Voraus für jede Hilfe!

1
Richard Tinkler

Ich befürchte, dass es keine Möglichkeit gibt, solche erweiterten Abfragen mit WP_Query durchzuführen.

Natürlich können Sie dieses Ergebnis immer noch erzielen, aber Sie müssen etwas mehr Code schreiben.

Es gibt zwei Lösungen:

Es ist schwierig, Ihnen präzisen Code zu geben, da Ihre Frage nicht viele Details enthält, aber vielleicht reicht das :)

1. Verwenden Sie die Filter posts_where und posts_join

Wenn Sie keine Angst haben, eigene SQL-Abfragen zu schreiben, können Sie mit den Filtern posts_where und posts_join erweiterte SQL-Bedingungen zu Ihrer WP_Query hinzufügen.

2. Verwenden Sie die zweite WP_Query und schließen Sie diese Beiträge aus

Wenn Sie Raw SQL nicht mögen, können Sie die zweite WP_Query verwenden. Verwenden Sie diese Option, um alle Beiträge auszuwählen, die Sie ausschließen möchten. Dann können Sie ihre IDs verwenden und sie als post__not_in param an Ihre aktuelle WP_Query übergeben - auf diese Weise schließen Sie sie aus.

2