it-swarm.com.de

WP_Query Woocommerce-Produkte, die nur in mehreren Kategorien tax_query gehören

Ich verwende WP_Query für Woocommerce-Produkte, um Produkte einer bestimmten Kategorie abzufragen. Dies ist die Syntax, die für mich funktioniert hat -

$args = array(
    'posts_per_page' => -1,
    'product_cat' => 'category-slug-here',
    'post_type' => 'product',
    'orderby' => 'title',
);
$the_query = new WP_Query( $args );
// The Loop
while ( $the_query->have_posts() ) {
    $the_query->the_post();
    echo '' . get_the_title() . '<br /><br />';
}
wp_reset_postdata();

Dies gibt Daten zurück, aber ich möchte eine ID übergeben, nicht einen Kategorieschläger, um zu filtern, und ich möchte Produkte finden, die in mehreren Kategorien vorhanden sind - nur

Das Argument product_cat ist nicht native für WP_Query (zumindest das kann ich finden), also gehe ich davon aus, dass dies etwas für Woocommerce ist. Durch ihre Dokumentation konnte ich nichts finden, das es mir ermöglicht, nach Kategorie-ID zu filtern, oder eine AND-Bedingung für diese Filterung zu verwenden.

Bei Verwendung von cat haben das Array von tax_query und category__and keine Ergebnisse ergeben. Im Wesentlichen möchte ich alle Produkte abfragen, die in den beiden Kategorien ID 102 und 115 vorhanden sind. Wenn ich Slugs verwenden muss, gibt es sicherlich einen Weg, diese Informationen anhand der ID zu erhalten, die ich habe, aber ich würde es tun Vermeiden Sie 2 Abfragen, um nach mehreren Kategorien zu filtern.

Weiß jemand, wie man das schafft?

UPDATE: Ich habe gelernt, dass das Trennen von Kategorie-Slugs durch Kommas im product_cat-Argument zu einem "ODER" -Effekt führt. Es werden also unterschiedliche Produkte von beiden kombiniert. Dies ist jedoch nicht das, wonach ich suche. Also zum Beispiel:

 'product_cat' => 'category-slug1, category-slug2'

ich werde insgesamt Produkte aus beiden Kategorien zurückgeben, aber ich suche immer noch nach einem Weg, um bestimmte Produkte zu finden, die NUR zu beiden oder zu mehreren Kategorien gehören. 

12
RCNeil

Wow, also nach stundenlangem Schlag auf meinen Kopf, konnte ich das lösen - 

$args = array(
    'posts_per_page' => -1,
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => 'category-slug1'
        ),
        array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => 'category-slug2'
        )
    ),
    'post_type' => 'product',
    'orderby' => 'title',
);
$the_query = new WP_Query( $args );

Dies nutzt das tax_query-Argument, einschließlich relation => 'AND', um sicherzustellen, dass das Produkt unter BEIDE Kategorien fällt.

Hoffe das hilft jemand in der Zukunft. 

Ich konnte auch nicht herausfinden, wie man eine ID übergibt, und nicht einen Slug (obwohl ich sicher bin, dass es einen Weg gibt), aber hier ist die Funktion, um den Slug basierend auf einer ID abzurufen:

$terms = get_term($YOURID, 'product_cat'); 
$theslug = $terms->slug; 
27
RCNeil

Abfragen nach category_ID hat bei mir funktioniert.

// First obtain term id:
//...
$all_categories = get_categories( $args );
$cat_ids = array();

foreach ($all_categories as $cat) 
{
     array_Push($cat_ids, $cat->term_id);
}

//Now use ids from array:
$args = array(
    'posts_per_page' => -1,
    'post_type' => 'product',
    'tax_query'     => array(
        array(
            'taxonomy'  => 'product_cat',
            'field'     => 'id', 
            'terms'     => $cat_ids
        )
    )
);
10
user2718602

Aus dem WordPress-Codex auf WP_Query für Kategorieparameter :

Äquivalent zu ODER

$args = array( 'product_cat' => 'category-slug1,category-slug2' ) );

Äquivalent zu UND

$args = array( 'product_cat' => 'category-slug1+category-slug2' );

z.B.

$query = new WP_Query( $args );
6
Daniel Twork

Innerhalb eines Arrays 'tax_query' können Sie einen 'Operator' angeben, der für die Abfrage ausgeführt werden soll. Mit dem Operator 'AND' können Sie erreichen, was Sie wollen.

$args = array(
'posts_per_page' => -1,
'tax_query' => array(
    'relation' => 'AND',
    array(
        'taxonomy' => 'product_cat',
        'field' => 'slug',
        'terms' => array( 'category-slug1', 'category-slug2' )
        'operator => 'AND',
    ),
),
'post_type' => 'product',
'orderby' => 'title',
);
$the_query = new WP_Query( $args );

Alle von dieser Abfrage ausgewählten Produkte stimmen mit den angegebenen "Begriffen" überein. Siehe diesen Link für weitere Informationen: https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Falls der Link jemals bricht, finden Sie hier die relevanten Informationen:

operator (string) - Zu testender Operator. Mögliche Werte sind 'IN', 'NOT IN', 'AND', 'EXISTS' und 'NOT EXISTS'. Der Standardwert ist 'IN'. 

0
asdf