Verwenden Sie benutzerdefinierte Metadaten in einer WC_Product_Query auf Woocommerce 3

Lesezeit: 3 Minuten

Benutzer-Avatar
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?

Benutzer-Avatar
LoicTheAztec

Produkt zu handhaben benutzerdefinierte Metadaten in einem WC_Product_Query (gelegen in wp_postmeta Tisch)es ist ganz einfach und funktioniert, wie im allerletzten Absatz der zugehörigen Dokumentation erläutert.

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':

$queried_products = wc_get_products( array( '_volume' => '0.2' ) );

Getestet und funktioniert.

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:

add_filter( 'woocommerce_product_data_store_cpt_get_products_query', static function($wp_query_args, $query_vars, $data_store_cpt){
    if ( ! empty( $query_vars['meta_query'] ) ) {$wp_query_args['meta_query'][] = $query_vars['meta_query'];}
    return $wp_query_args;
}, 10, 3 );

Übergeben Sie jetzt einfach meta_query an wc_get_products und es unterstützt es :). Sie sollten mich wahrscheinlich einstellen, lol.

1374530cookie-checkVerwenden Sie benutzerdefinierte Metadaten in einer WC_Product_Query auf Woocommerce 3

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy