Holen Sie sich alle Produktvariationen für bestimmte Produktattributwerte in Woocommerce

Lesezeit: 2 Minuten

Benutzer-Avatar
David Smith

Im WooCommerce*(latest version)* I have oneVariableproduct withID: 9`.
Mit den Attributen für Variation unten habe ich mehrere Produktvariationen erstellt.

Dann möchte ich eine bestimmte Produktvariation aus der übergeordneten Produkt-ID (Id: 9) und die folgenden Attributwerte:

<attribute_for_variation>: <attribute_value_to_filter>
pa_size: size_8x10
pa_material: mat_luster_photo_paper
pa_frame: fra_silver_wood
pa_mat_usage: musa_yes

Unten sehen Sie einen Screenshot dieser Variante:

Geben Sie hier die Bildbeschreibung ein

Ich habe die folgenden Codes mit den entsprechenden Ergebnissen ausprobiert. Der Einfachheit halber vorerst nur mit dem probiert pa_frame nur Attribut.

Versuch 1:

static function filterVariations() {
    $query = [
        'post_parent' => 9,
        'post_status' => 'publish',
        'post_type' => ['product_variation'],
        'posts_per_page' => -1,
    ];
    $result = [];
    $wc_query = new \WP_Query($query);
    while ($wc_query->have_posts()) {
        $wc_query->next_post();
        $result[] = $wc_query->post;
    }
    return $result;
}
// ---> RESULT: all the variations, that's OK

Versuch 2:

static function filterVariations() {
    $query = [
        'post_parent' => 9,
        'post_status' => 'publish',
        'post_type' => ['product_variation'],
        'posts_per_page' => -1,
        'tax_query' => [
            'relation' => 'AND',
            [
                'taxonomy' => 'pa_frame',
                'field' => 'slug',
                'terms' => [ 'fra_silver_wood' ],
            ],
        ],
    ];
    $result = [];
    $wc_query = new \WP_Query($query);
    while ($wc_query->have_posts()) {
        $wc_query->next_post();
        $result[] = $wc_query->post;
    }
    return $result;
}
// ---> RESULT: empty list

Haben Sie eine Idee, wie Sie alle Variationen mit bestimmten Attributwerten zurückgeben können?

Benutzer-Avatar
LoicTheAztec

Produktattribute in variablen Produkten werden als Metadaten gesetzt in der Datenbanktabelle wp_postmeta. Dann Sie müssen eine Meta-Abfrage verwenden statt einer Steuerabfrage. Versuche dies:

static function filterVariations() {
    $query = new \WP_Query( array(
        'post_parent' => 9,
        'post_status' => 'publish',
        'post_type' => 'product_variation',
        'posts_per_page' => -1,
        'meta_query' => array( array(
            'key' => 'attribute_pa_frame',
            'value' => 'fra_silver_wood',
        ) ),
    ) );
    $result = array();
    if($query->have_posts()){
        while ($query->have_posts()) {
            $query->next_post();
            $result[] = $query->post;
        }
        wp_reset_postdata();
    }
    wp_reset_query();

    return $result;
}

Das sollte jetzt wie erwartet funktionieren…

Für Ihre mehreren Produktattributpaare ( Schlüssel / Wert ), wie in Ihrer Frage aufgeführt, verwenden Sie sie einfach in Ihrer WP_Query Hier entlang:

public function filterVariations() {
    $query = new \WP_Query( array(
        'post_parent' => 40,
        'post_status' => 'publish',
        'post_type' => 'product_variation',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key'   => 'attribute_pa_size',
                'value' => 'size_8x10',
            ),
            array(
                'key'   => 'attribute_pa_material',
                'value' => 'mat_luster_photo_paper',
            ),
            array(
                'key'   => 'attribute_pa_frame',
                'value' => 'fra_silver_wood',
            ),
            array(
                'key'   => 'attribute_pa_mat_usage',
                'value' => 'musa_yes',
            ),
        ),
    ) );
    $result = array();
    if($query->have_posts()){
        while ($query->have_posts()) {
            $query->next_post();
            $result[] = $query->post;
        }
        wp_reset_postdata();
    }
    wp_reset_query();

    return $result;
}

Dann erhalten Sie in der Regel die entsprechende Produktvariante (nur eine)…

Notiz: Metaschlüssel für Produktattribute beginnen alle mit attribute_pa_ statt nur pa_

Dokumentation: WP_Query und benutzerdefinierte Feldparameter (Meta-Abfrage)

1370940cookie-checkHolen Sie sich alle Produktvariationen für bestimmte Produktattributwerte in Woocommerce

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

Privacy policy