Verwenden Sie benutzerdefinierte Metadaten in einer WC_Product_Query auf Woocommerce 3
Lesezeit: 3 Minuten
Rob Teeuwen
Früher habe ich die Standard-Wordpress WP_Query verwendet, um Woocommerce-Produkte basierend auf Metadaten abzurufen. Meine Produkte sind Tracks und haben viele Meta-Spalten (wie Genre, Instrument, Stimmung usw.). Mit WP_Query kann ich basierend auf Benutzereingaben aus einem Formular eine meta_query erstellen, die nach Produkten sucht, die die Metaanforderungen erfüllen. Das alles funktioniert super.
Jetzt möchte ich wp_get_products anstelle von WP_Query verwenden, da dies die neue Methode zum Abrufen von Produkten ist und zukunftssicherer sein soll als die alte Methode. Ich kann jedoch nicht herausfinden, wie ich die meta_query an diese Funktion übergeben soll. Auf github wurde angekündigt, dass wc_get_products Meta ab Version 2.8 unterstützen würde. Die einzigen Informationen, die ich dazu finden kann, sind unter folgendem Link: https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query (letzter Absatz).
Ich habe versucht, die meta_query als Array von Arrays zu übergeben, die jeweils 3 Schlüssel-Wert-Paare für Schlüssel, Wert und Vergleich enthalten, genau wie in WP_Query. Ich habe auch versucht, Meta als hinzuzufügen Meta: meta-field-name, das ist der Name der eigentlichen Felder, nur der Name selbst ohne das Präfix „meta“ und einige andere Varianten. Keine dieser Methoden funktioniert jedoch. Kann mir jemand sagen, ob sich diese „Unterstützung benutzerdefinierter Parameter“ nur auf andere benutzerdefinierte Parameter als Metafelder bezieht, oder mache ich etwas falsch?
Aber es behandelt nicht mehrere Werte und Vergleichsargumente wie in a WP_Query, wenn Sie sie nicht in der Funktion setzen, die die meta_query erweitern.
Für ein kundenspezifisches Produkt Meta-Schlüssel wie _volume zu handhaben die Lautstärke von einem Produkt übernommen in m3(Kubikmeter)wird der folgende Code diese benutzerdefinierte Funktion aktivieren meta_key mit einem bestimmten compare Streit “größer als”:
add_filter( 'woocommerce_product_data_store_cpt_get_products_query', 'handling_custom_meta_query_keys', 10, 3 );
function handling_custom_meta_query_keys( $wp_query_args, $query_vars, $data_store_cpt ) {
$meta_key = '_volume'; // The custom meta_key
if ( ! empty( $query_vars[$meta_key] ) ) {
$wp_query_args['meta_query'][] = array(
'key' => $meta_key,
'value' => esc_attr( $query_vars[$meta_key] ),
'compare' => '>', // <=== Here you can set other comparison arguments
);
}
return $wp_query_args;
}
Der Code wird in der function.php-Datei des aktiven untergeordneten Designs (oder aktiven Designs) abgelegt.
Jetzt stellen Sie einfach Ihre Anfrage zu diesem Brauch _volume Metaschlüssel basierend auf dem spezifischen 'compare' Argument, zu erhalten Sie alle Produkte, die ein Volumen größer als haben '0.2':
Wie Sie sehen können, können Sie weiter mit a WP_Query wie es viele Woocommerce-Entwickler immer noch tun oder sogar SQL-Abfragen über WordPress WPDB Klasse…
Die angekündigte Revolution dazu wird nicht so bald kommen und ich nehme an, dass sie sich ausdehnen wird WC_Product_Query und WC_Order_query wie WP_Query mit vielen weiteren Funktionen und Möglichkeiten.
Sie können diese kleine Funktion hinzufügen, um alles zu beheben: