2017-01-14 6 views
1

Ich bin in einer einzigartigen Situation mit meiner Woocommerce-Website.Benutzerdefinierte Gebühr basierend auf Produktabmessungen und Kategorien

Ich muss eine Verpackungsgebühr hinzufügen, die einer Bearbeitungsgebühr etwas ähnlich sein wird.

Leider ist es nicht so einfach wie das Hinzufügen einer Bearbeitungsgebühr von 5,00 $ zu jeder Bestellung.

Da ich Holzprodukte basierend auf ihren Abmessungen (Breite x Höhe) verkaufe, basieren die Verpackungskosten auf der Gesamtfläche für Artikel. Und sie können sich auch in Abhängigkeit von der Kategorie der Artikel unterscheiden.

Ich habe eine Menge Forschung gemacht und ich kann kein Plugin finden, um mit dieser Situation umzugehen.

Um die Komplexität zu erhöhen, gibt es eine ganze Tabelle, die erstellt werden müsste. Beispiel: Wenn Artikel aus einer Kategorie eine Gesamtfläche zwischen 1 und 10 haben, beträgt die Verpackungsgebühr $ 10. Wenn der Gesamt-Quadratfuß zwischen 11 und 20 liegt, dann ist es $ 20.

Wie kann ich das erreichen?

Dank

+1

Bitte prüfe https://stackoverflow.com/help/on-topic. Diese Frage passt nicht zum Q & A Format von stackoverflow. –

+0

Dies scheint etwas zu sein, das Sie vielleicht einen Entwickler beauftragen möchten, um für Sie zu erstellen. – helgatheviking

Antwort

1

Aktualisiert: Added WooCommerce 3+ Kompatibilität

Dies ist möglich, und leicht mit dem add_fee() Verfahren in dem Haken woocommerce_cart_calculate_fees. Hier ist ein einfaches Anwendungsbeispiel für einfache Produkte, mit 2 Kategorien und basierend auf den Produktabmessungen Messberechnungen für jeden Artikel des Wagens. Es ist auch für andere Produkttypen möglich. Hier

ist das Beispiel-Code (die Sie benötigen für Ihren eigenen Fall anpassen):

add_action('woocommerce_cart_calculate_fees','custom_applied_fee', 10, 1); 
function custom_applied_fee($cart_object) { 

    if (is_admin() && ! defined('DOING_AJAX')) 
     return; 

    // Set HERE your categories (can be an ID, a slug or the name… or an array of this) 
    $category1 = 'plain'; 
    $category2 = 'plywood'; 

    // variables initialisation 
    $fee = 0; 
    $coef = 1; 

    // Iterating through each cart item 
    foreach($cart_object->get_cart() as $cart_item){ 
     $product_id = version_compare(WC_VERSION, '3.0', '<') ? $cart_item['data']->id : $cart_item['data']->get_id(); 
     $product = $cart_item['data']; // Get the product object 

     // Get the dimentions of the product 
     $height = $product->get_height(); 
     $width = $product->get_width(); 
     // $length = $product->get_length(); 

     // Initialising variables (in the loop) 
     $cat1 = false; $cat2 = false; 

     // Detecting the product category and defining the category coeficient to change price (for example) 
     // Set here for each category the modification calculation rules… 
     if(has_term($category1, 'product_cat', $cart_item['product_id'])) 
      $coef = 1.15; 
     if(has_term($category2, 'product_cat', $cart_item['product_id'])) 
      $coef = 1.3; 

     // ## CALCULATIONS ## (Make here your conditional calculations) 
     $dimention = $height * $with; 
     if($dimention <= 10){ 
      $fee += 10 * $coef; 
     } elseif($dimention > 10 && $dimention <= 20){ 
      $fee += 20 * $coef; 
     } elseif($dimention > 20){ 
      $fee += 30 * $coef; 
     } 
    } 

    // Set here the displayed fee text 
    $fee_text = __('Packaging fee', 'woocommerce'); 

    // Adding the fee 
    if ($fee > 0) 
     WC()->cart->add_fee($fee_text, $fee, false); 
     // Note: Last argument in add_fee() method is related to applying the tax or not to the discount (true or false) 

} 

Sie müssen Ihre eigenen Kategorien mit den entsprechenden Änderungen Berechnungen für jede Kategorie festgelegt. Sie erhalten eine nicht detaillierte allgemeine Ausgabegebühr, die unter Berücksichtigung jedes Artikels im Einkaufswagen berechnet wird.

Code geht in function.php Datei von Ihrem aktiven Kind Thema (oder Thema). Oder auch in beliebigen Plugin-PHP-Dateien.

Der Code ist getestet und voll funktionsfähig.

Verwandte Antworten:

Verwandte Themen