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.
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;
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
)
)
);
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 );
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'.