Ändern Sie die Flatrate-Versandkosten basierend auf der Anzahl der Attributwerte in WooCommerce

Lesezeit: 3 Minuten

Benutzer-Avatar
Craig de Gouvéia

Ich versuche, 2 verschiedene Flatrate-Versandmethodenkosten anzugeben, ohne ein Plugin zu verwenden:

  • Wenn sich im Warenkorb ein Produkt von nur einem Anbieter befindet, müssen die Versandkostenpauschale 19 £ betragen.
  • Wenn der Warenkorb mehrere Produkte von mehr als einem Anbieter enthält, müssen die Versandkosten pauschal 39 £ betragen.

Ich habe verschiedene Plugins ausprobiert, aber sie konzentrieren sich auf Versandkosten basierend auf Größe, Gewicht, Menge, Standort, Kategorie, aber nicht auf Attribute oder Bedingungen.

Ich habe ein Attribut namens Verkäufer mit 8 Begriffen. Jeder Begriff ist ein anderer Anbieter/Lieferant.

Hier ist die Art von PHP-Logik, die ich implementieren möchte:

if product attribute term quantity = 1

then flat rate = £19

else

if product attribute term quantity > 1

then flat rate = £39

Wie kann ich die Kosten für die Versandart “Flatrate” ändern, wenn sich mehr als 1 Attribut Anbieterbedingungen im Warenkorb befindet?

  • stackoverflow.com/questions/64080131/…

    – nikosvl97

    23. Oktober 2020 um 11:53 Uhr

Dieser Prozess erfordert 2 Schritte: etwas Code und einige Einstellungen…

1) CODE – Sie können eine benutzerdefinierte Funktion verwenden, die eingehakt ist woocommerce_package_rates Filterhaken, der auf die Versandmethode „Flatrate“ abzielt, wenn Artikel im Warenkorb von mehr als einem Anbieter stammen:

add_filter( 'woocommerce_package_rates', 'custom_flat_rate_cost_calculation', 10, 2 );
function custom_flat_rate_cost_calculation( $rates, $package )
{

    // SET BELOW your attribute slug… always begins by "pa_"
    $attribute_slug = 'pa_vendor'; // (like for "Color" attribute the slug is "pa_color")


    // Iterating through each cart item to get the number of different vendors
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

        // The attribute value for the current cart item
        $attr_value = $cart_item[ 'data' ]->get_attribute( $attribute_slug );

        // We store the values in an array: Each different value will be stored only one time
        $attribute_values[ $attr_value ] = $attr_value;
    }
    // We count the "different" attribute values stored
    $count = count($attribute_values);

    // Iterating through each shipping rate
    foreach($rates as $rate_key => $rate_values){
        $method_id = $rate_values->method_id;
        $rate_id = $rate_values->id;

        // Targeting "Flat Rate" shipping method
        if ( 'flat_rate' === $method_id ) {
            // For more than 1 vendor (count)
            if( $count > 1 ){
                // Get the original rate cost
                $orig_cost = $rates[$rate_id]->cost;
                // Calculate the new rate cost
                $new_cost = $orig_cost + 20; // 19 + 20 = 39
                // Set the new rate cost
                $rates[$rate_id]->cost = $new_cost;
                // Calculate the conversion rate (for below taxes)
                $conversion_rate = $new_cost / $orig_cost;
                // Taxes rate cost (if enabled)
                foreach ($rates[$rate_id]->taxes as $key => $tax){
                    if( $rates[$rate_id]->taxes[$key] > 0 ){
                        $new_tax_cost = number_format( $rates[$rate_id]->taxes[$key]*$conversion_rate, 2 );
                        $rates[$rate_id]->taxes[$key] = $new_tax_cost; // set the cost
                    }
                }
            }
        }
    }
    return $rates;
}

Code geht in die function.php-Datei Ihres aktiven Child-Themes (oder Themes) oder auch in jede Plugin-Datei.

Dieser Code wurde mit WooCommerce Version 3+ getestet und funktioniert

2) EINSTELLUNGEN – Sobald der obige Code in der function.php-Datei Ihres aktiven Themes gespeichert wurde, müssen Sie (für alle Ihre Versandzonen) die Versandmethode “Flatrate” auf Kosten festlegen 19 (£19) (und speichern).

WICHTIG: Um Caches für Versandmethoden zu aktualisieren, müssen Sie dies tun deaktivieren dann “Flatrate”. sparenund zurück aktivieren dann “Flatrate”. sparen.

Jetzt sollte dies wie erwartet für Sie funktionieren.

  • Funktioniert perfekt. Das ist @LoicTheAztec – sehr geschätzt.

    – Craig de Gouvéia

    14. August 2017 um 8:22 Uhr

  • Was ist, wenn die Rate dynamisch geändert werden muss? Was ist, wenn der Preis von der Einkaufszeit abhängt? Und wenn Sie die Versandart über das Frontend wechseln, bleiben die Versandkosten gleich.

    – Andrii Kowalenko

    9. Juli 2020 um 22:18 Uhr


1227330cookie-checkÄndern Sie die Flatrate-Versandkosten basierend auf der Anzahl der Attributwerte in WooCommerce

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

Privacy policy