WooCommerce - Hinzufügen eines benutzerdefinierten Felds zu Warenkorbelementen und Warenkorbsummen [geschlossen]


7

Ich verwende das WooCommerce-Plugin und habe folgende Abfrage:

Innerhalb der einzelnen Produktseite habe ich ein Produkt, bei dem basierend auf bestimmten Auswahlen des Käufers ein Versandkostenwert berechnet wird, den ich dann als neue Spalte "Versandkosten" als Teil der Warenkorbartikel übergeben muss Anzeigen Ihres Warenkorbs.

Die Sache ist jedoch, dass der Käufer sich entscheiden könnte, beispielsweise drei verschiedene Produkte zu kaufen, bei denen jedes dieser drei Produkte unterschiedliche Versandkostenberechnungen haben könnte, nachdem er dreimal auf die Schaltfläche "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 auf "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 in den Warenkorb legen möchte. Ich bin mir nicht sicher, wie ich das machen soll.

Darüber hinaus möchte ich zu den "Warenkorbsummen" unten ein weiteres benutzerdefiniertes Feld "Versandkosten" hinzufügen, das sich auf insgesamt 12 US-Dollar beläuft und dann zur Gesamtproduktsumme hinzugefügt wird, d. H.

Cart Totals

Cart Subtotal       $30
Shipping Cost       $12

Order Total         $42

Einige der Codes, die ich für den Warenkorb verwendet habe, sind:

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');

Ich muss also wissen, wie man die "Versandkosten" sowohl zu den Warenkorb-Produktdetails als auch zu den Warenkorb-Summen hinzufügt.

Jede Codierungshilfe wäre sehr dankbar.

Vielen Dank.


Welchen Code haben Sie bisher ausprobiert?
Brad Dalton

Hallo, habe meinen Beitrag oben aktualisiert, aber 100 fest codiert, was ich nicht will, sondern berechnet habe.
Tonyf

Dies ist keine WordPress-Frage, sondern eine Woocommerce-Frage. Sie sollten sie besser in den Support-Kanälen des Plugins stellen, da diese Art von Fragen hier größtenteils nicht zum Thema gehören
Mark Kaplun,

Seltsam, da ich in diesem Forum viele Fragen mit dem WooCommerce-Tag gesehen habe.
Tonyf

Ja, und die nützliche Antwortrate liegt nicht viel über Null.
Mark Kaplun

Antworten:


4

Speichern Sie zunächst 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 Nummer gespeichert ist, z. B. 20, NICHT $ 20.00

Anschließend müssen Sie dieses Feld auf der Warenkorbseite anzeigen. Leider gibt es keinen Filter zum Hinzufügen einer neuen Spalte in der Warenkorbtabelle. Sie müssen also die Vorlagendatei bearbeiten. Wenn es sich nicht um eine Spalte handeln 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 Beispiel oben anzeigen möchten, müssen Sie die Plugins / woocommerce / templates / cart / cart.php-Datei in Themen / yourtheme / woocommerce / cart / cart.php duplizieren. Bearbeiten Sie dann die Datei, fügen Sie Ihre eigene Spalte hinzu. 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. Stellen Sie sicher, dass Sie die Zeilen Nur zum Testen ... aus beiden Codes entfernen. Ich habe das benutzerdefinierte Feld auf meiner Site nicht zum Testen erstellt.


Hallo passatgt - ich schätze Ihre Hilfe und Ihr hervorragendes Beispiel mit Erklärung sehr. Ich werde versuchen, was Sie vorgeschlagen haben, und wenn es in Ordnung ist, ist es in Ordnung, wenn ich mit Schluckauf zu Ihnen zurückkomme.
Tonyf

Wenn es mit der ursprünglichen Frage zusammenhängt, sicher :)
passatgt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.