WooCommerce: Filtert nach den Metadaten der Produkttaxonomie und der Produktvariation

In WooCommerce möchte ich meine Produktseite basierend auf der Taxonomie der Produktvariation meta und verwandter variabler Produkte filtern.

Hinweis: Alle Produkte haben Variationen, es gibt kein Produkt ohne Variationen.

Ich möchte zum Beispiel Produkte nach Kategorien verwandter variabler Produkte (Armbänder, Ohrringe, Ringe …) und deren Farbvarianten Meta (Gold, Silber, Bronze …) filtern können.

Das Problem ist die Kombination der Taxonomie und Produktvariationen funktioniert nicht. Um nach Taxonomie zu filtern, verwende ich den folgenden Code:

$args = array ( 'post_type' => array ('product'), 'post_status' => 'publish', 'order_by' => 'date', 'order' => 'DSC', 'posts_per_page' => 18, 'tax_query' => $tax_query ); 

Das funktioniert und gibt mir die richtigen Ergebnisse.

Um das Meta der Variation zu filtern, habe ich diesen Code benutzt (es funktioniert auch):

  $args2 = array ( 'post_type' => array ('product_variation'), 'post_status' => 'publish', 'order_by' => 'date', 'order' => 'DSC', 'posts_per_page' => 18, 'meta_query' => $meta_query ); 

Nun, was nicht funktioniert, ist beides zusammen zu kombinieren. Ich denke es, weil Produktvariationen keine Taxonomie haben, also könnte ich mit der Logik etwas falsch machen. Hier was ich versucht habe und es nicht funktioniert:

  $args = array ( 'post_type' => array ('product', 'product_variation'), 'post_status' => 'publish', 'order_by' => 'date', 'order' => 'DSC', 'posts_per_page' => 18, 'tax_query' => $tax_query, 'meta_query' => $meta_query ); 

Wenn ich das mache, bekomme ich “kein Produkt gefunden”, dachte sogar, dass meine Filter etwas zurückgeben müssen.

Jede Hilfe wird sehr geschätzt. Vielen Dank

Solutions Collecting From Web of "WooCommerce: Filtert nach den Metadaten der Produkttaxonomie und der Produktvariation"

Sie können versuchen, $ wpdb wie folgt zu verwenden:

 // Use the global variable $wpdb; global $wpdb; // :: Define SQL command :: // You can request for the IDs only, // and then get the properties later on via get_post_meta or WC_Product() $q = 'SELECT wp_posts.ID '; $q .= 'FROM wp_posts '; // Attach wp_postmeta table $q .= 'JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) '; // Attach taxonomy and term tables $q .= 'JOIN wp_term_relationships ON ( wp_posts.ID = wp_term_relationships.object_id ) '; $q .= 'JOIN wp_term_taxonomy ON ( wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id ) '; $q .= 'JOIN wp_terms ON ( wp_term_taxonomy.term_id = wp_terms.term_id ) '; // WHERE statements $q .= 'WHERE '; // Post should be published $q .= 'wp_posts.post_status = "publish" '; $q .= 'AND '; // Post should have either product or product_variation as post_type $q .= '('; $q .= 'wp_posts.post_type = "product" '; $q .= 'OR '; $q .= 'wp_posts.post_type = "product_variation" '; $q .= ')'; $q .= 'AND '; // Post should have ##color_meta_key## = ##color_meta_value## $q .= '('; $q .= 'wp_postmeta.meta_key = "##color_meta_key##" '; $q .= 'AND '; $q .= 'wp_postmeta.meta_value = "##color_meta_value##" '; $q .= ')'; $q .= 'AND '; // Post should belong to taxonomy_term with ##taxonomy_term_id## as ID $q .= 'wp_term_taxonomy.term_id IN ( ##taxonomy_term_id## ) '; // Ordered according to date, descending $q .= 'ORDER BY wp_posts.post_date DESC '; // Limit the result to 18 $q .= 'LIMIT 18 ' // Will return an object $wpdb->get_results($q);