it-swarm.com.de

WooCommerce - Hinzufügen eines eigenen Feldes zu Warenkorbelementen und Warenkorbsummen

Ich benutze das WooCommerce-Plugin und habe folgende Anfrage:

Innerhalb der einzelnen Produktseite habe ich ein Produkt, bei dem anhand bestimmter Auswahlmöglichkeiten durch den Käufer ein Versandkostenwert berechnet wird, den ich dann als neue Spalte "Versandkosten" als Teil der Warenkorbpositionen übergeben/einbeziehen muss Warenkorb anzeigen.

Die Sache ist jedoch, dass der Käufer sich möglicherweise für den Kauf von beispielsweise drei verschiedenen Produkten entscheidet, bei denen für jedes dieser drei Produkte unterschiedliche Versandkosten berechnet wurden, nachdem er dreimal auf "In den Warenkorb" geklickt hat.

Zum Beispiel:

Product A selections calculates a Shipping Cost of $2.00
Product B selections calculates a Shipping Cost of $4.00
Product C selections calculates a Shipping Cost of $6.00

Wenn der Käufer den Einkauf beendet hat und "Warenkorb anzeigen" drückt, möchte ich, dass er Folgendes sieht:

Item                       Price      Shipping Cost      Quantity          Total     
---------------------------------------------------------------------------------------
Product A                      $10        $2                     1                 $10
Product B                      $5         $4                     1                 $5
Product C                      $15        $6                     1                 $15

Es ist die benutzerdefinierte Feldspalte "Versandkosten", die ich dem Warenkorb hinzufügen möchte. Ich bin nicht sicher, wie ich das tun soll.

Darüber hinaus möchte ich zu den nachstehenden "Cart Totals" ein weiteres benutzerdefiniertes Feld für "Shipping Cost" (Versandkosten) hinzufügen, das sich auf insgesamt 12 US-Dollar beläuft und dann zur gesamten Produktsumme, d. H.

Cart Totals

Cart Subtotal       $30
Shipping Cost       $12

Order Total         $42

Ein Teil des Codes, den ich für die Gesamtkosten des Einkaufswagens verwendet habe, ist:

function woo_add_cart_fee() {
  global $woocommerce;
  $woocommerce->cart->add_fee( __('Shipping Cost', 'woocommerce'), 100 );
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');

Daher muss ich wissen, wie die "Versandkosten" sowohl zu den Warenkorb-Produktdetails als auch zu den Warenkorb-Summen hinzugefügt werden.

Jede Hilfe bei der Codierung wäre sehr dankbar.

Vielen Dank.

7
tonyf

Speichern Sie zuerst das benutzerdefinierte Feld, wenn Sie Ihr Produkt bearbeiten. Nehmen wir an, Sie verwenden das benutzerdefinierte Feld custom_shipping_cost. Stellen Sie sicher, dass es als Zahl gespeichert ist, z. B. 20, NICHT 20,00 USD

Dann müssen Sie dieses Feld auf der Warenkorbseite anzeigen. Leider gibt es keinen Filter zum Hinzufügen einer neuen Spalte in der Cart-Tabelle, sodass Sie die Vorlagendatei bearbeiten müssen. Wenn dies keine Spalte sein muss, können Sie dies stattdessen tun. Dieser Code fügt den zusätzlichen Wert zum letzten hinzu Säule:

add_filter('woocommerce_cart_item_subtotal','additional_shipping_cost',10,3);
function additional_shipping_cost($subtotal, $values, $cart_item_key) {
    //Get the custom field value
    $custom_shipping_cost = get_post_meta($post->ID, 'custom_shipping_cost', true);

    //Just for testing, you can remove this line
    $custom_shipping_cost = 10;

    //Check if we have a custom shipping cost, if so, display it below the item price
    if ($custom_shipping_cost) {
        return $subtotal.'<br>+'.woocommerce_price($custom_shipping_cost).' Shipping Cost';
    } else {
        return $subtotal;   
    }
}

Damit ist der erste Teil der Frage erledigt. Wenn Sie es als Ihr Beispiel oben anzeigen möchten, müssen Sie die Datei plugins/woocommerce/templates/cart/cart.php in themes/yourtheme/woocommerce/cart/cart.php duplizieren. Bearbeiten Sie dann die Datei, fügen Sie Ihre eigene Spalte hinzu, und verwenden Sie den obigen Code, um den Preis anzuzeigen.

Danach müssen wir die Warenkorbsummen mit den zusätzlichen Kosten aktualisieren. Ihr Code mit der add_fee ist praktisch:

function woo_add_cart_fee() {
    global $woocommerce;

    $extra_shipping_cost = 0;
    //Loop through the cart to find out the extra costs
    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        //Get the product info
        $_product = $values['data'];

        //Get the custom field value
        $custom_shipping_cost = get_post_meta($_product->id, 'custom_shipping_cost', true);

        //Just for testing, you can remove this line
        $custom_shipping_cost = 10;

        //Adding together the extra costs
        $extra_shipping_cost = $extra_shipping_cost + $custom_shipping_cost;
    }

    //Lets check if we actually have a fee, then add it
    if ($extra_shipping_cost) {
        $woocommerce->cart->add_fee( __('Shipping Cost', 'woocommerce'), $extra_shipping_cost );
    }
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');

Das ist es, es sollte danach funktionieren. Achten Sie darauf, die Zeilen Nur zum Testen ... aus beiden Codes zu entfernen. Ich habe auf meiner Site kein benutzerdefiniertes Feld zum Testen erstellt.

4
passatgt