Holen Sie sich das Steueretikett pro Bestellposition in Woocommerce 3

Lesezeit: 4 Minuten

Benutzeravatar von Janine Kroser
Janine Kroser

Ich versuche, das Steueretikett in WooCommerce für jede Bestellposition zu erhalten.

Zum Beispiel: 2x Produkt 1 – 19 % MwSt. (MwSt.) 4x Produkt 2 – 19 % MwSt. (MwSt.) 1x Produkt 2 – 19 % MwSt. (MwSt)

Also habe ich in den Woocommerce-Einstellungen die Steuern „19 % (Steuer)“ als Standardwert und „7 % (Steuer)“ als reduzierte Steuer hinzugefügt. Ich habe auch eingestellt, dass ich Preise in WooCommerce “ohne Steuern” anzeigen und eingeben möchte.

Jetzt habe ich eine Bestellung mit diesen beiden Artikeln (digital und herunterladbar) aufgegeben und danach versuche ich, die Steuerwerte jeder Bestellposition zu erhalten.

$wc_order = wc_get_order(143);
foreach ($wc_order->get_items(array('line_item')) as $item_id => $line_item) {

      $order_product_detail = $line_item->get_data();

      $item_tax_class = $order_product_detail['tax_class'];
      $item_subtotal_tax = $order_product_detail['subtotal_tax'];
      $item_total_tax = $order_product_detail['total_tax'];
      $item_taxes_array = $order_product_detail['taxes'];

      var_dump($item_tax_class);
      var_dump($item_subtotal_tax);
      var_dump($item_total_tax);
      var_dump($item_taxes_array);
}

Dies ist die Ausgabe:

string(0) "" string(4) "0.76" string(6) "0.2185" array(2) { ["total"]=> array(1) { [1]=> string(6) "0.2185" } ["subtotal"]=> array(1) { [1]=> string(4) "0.76" } } string(0) "" string(4) "0.38" string(6) "0.2451" array(2) { ["total"]=> array(1) { [1]=> string(6) "0.2451" } ["subtotal"]=> array(1) { [1]=> string(4) "0.38" } } string(0) "" string(4) "2.85" string(5) "2.166" array(2) { ["total"]=> array(1) { [1]=> string(5) "2.166" } ["subtotal"]=> array(1) { [1]=> string(4) "2.85" } } string(0) "" string(4) "0.76" string(6) "0.6251" array(2) { ["total"]=> array(1) { [1]=> string(6) "0.6251" } ["subtotal"]=> array(1) { [1]=> string(4) "0.76" } } string(0) "" string(4) "0.95" string(6) "0.8151" array(2) { ["total"]=> array(1) { [1]=> string(6) "0.8151" } ["subtotal"]=> array(1) { [1]=> string(4) "0.95" } } string(0) "" string(4) "1.14" string(6) "1.0051" array(2) { ["total"]=> array(1) { [1]=> string(6) "1.0051" } ["subtotal"]=> array(1) { [1]=> string(4) "1.14" } } string(0) "" string(4) "1.52" string(6) "1.3851" array(2) { ["total"]=> array(1) { [1]=> string(6) "1.3851" } ["subtotal"]=> array(1) { [1]=> string(4) "1.52" } }

Da mir dies nicht die Bezeichnung der Steuer pro Position gibt, habe ich Folgendes versucht:

$wc_order = wc_get_order(143);
foreach ($wc_order->get_items(array('line_item')) as $item_id => $line_item) {
       $order_item_tax = new WC_Order_Item_Tax($item_id);
       var_dump($order_item_tax->get_label());
}

Dies ist die Ausgabe:

string(14) "Mehrwertsteuer" string(14) "Mehrwertsteuer" string(14) "Mehrwertsteuer" string(14) "Mehrwertsteuer" string(14) "Mehrwertsteuer" string(14) "Mehrwertsteuer" string(14) "Mehrwertsteuer"

Es müssten aber “19 % MwSt.” sein.

Also habe ich dieses ausprobiert:

$wc_order = wc_get_order(143);
foreach ($wc_order->get_items(array('tax')) as $item_id => $line_item) {
     var_dump($line_item->get_label());
}

Dies gibt aus:

string(10) "19 % MwSt."

Also ja, das ist der Wert, den ich brauche, aber warum wird dieser Wert nur einmal ausgegeben, da ich sieben Artikel in der Bestellung habe?

Gibt es eine Möglichkeit, das Steueretikett jeder Bestellposition zu erhalten, oder ist dies in WooCommerce nicht möglich? Mein Ziel ist es, ein Rechnungsprogramm zu erstellen, aber ich muss berücksichtigen, ob es unterschiedliche Steuersätze pro Zeile gibt.

WooCommerce-Version ist 3.4.2

Danke im Voraus

Der folgende Code funktioniert seit Woocommerce Version 3.

Es ermöglicht Ihnen, das Steueretikett zu erhalten, wie man viele haben kann in einer Bestellung abhängig von Ihren Steuereinstellungen, Produkteinstellungen und Versandeinstellungen.

// Get an instance of the WC_order object
$order = wc_get_order(143);

// Initializing variables
$tax_items_labels   = array(); // The tax labels by $rate Ids
$shipping_tax_label="";      // The shipping tax label

// 1. Loop through order tax items
foreach ( $order->get_items('tax') as $tax_item ) {
    // Set the tax labels by rate ID in an array
    $tax_items_labels[$tax_item->get_rate_id()] = $tax_item->get_label();

    // Get the tax label used for shipping (if needed)
    if( ! empty($tax_item->get_shipping_tax_total()) )
        $shipping_tax_label = $tax_item->get_label();
}

// 2. Loop through order line items and get the tax label
foreach ( $order->get_items() as $item_id => $item ) {
    $taxes = $item->get_taxes();
    // Loop through taxes array to get the right label
    foreach( $taxes['subtotal'] as $rate_id => $tax ){
        $tax_label = $tax_items_labels[$rate_id]; // <== Here the line item tax label
        // Test output line items tax label
        echo '<pre>Item Id: '.$item_id.' | '; print_r($tax_label); echo '</pre>';
    }
}

// Test output shipping tax label
echo '<pre>Shipping tax label: '; print_r($shipping_tax_label); echo '</pre>';

Getestet in Woocommerce-Version 3.4.2

  • Danke, das funktioniert tatsächlich korrekt und WooCommerce verwendet eine ähnliche Methode auf der Bestelldetailseite, also denke ich, dass es keinen einfacheren Weg gibt, dies zu tun.

    – passatgt

    25. Mai 2019 um 14:33 Uhr

  • Ich habe an etwas Ähnlichem gearbeitet und vielleicht ist es für einige Leute nützlich: cart.php-Vorlage mit einer zusätzlichen Spalte, die den Steuerbetrag und -satz der Position anzeigt: github.com/saskia/…

    – Saskia

    20. Juli 2020 um 16:10 Uhr

  • @Saskia Ja, aber Haken sind ein besserer Weg: 1) Sie müssen Vorlagen nicht aktualisieren, wenn WooCommerce die zugehörige Vorlage aktualisiert. 2) Einige Themes enthalten bereits Vorlagenanpassungen, daher müssen die notwendigen Änderungen an der Theme-Vorlage vorgenommen werden, die Sie vorher in ein Child-Theme kopieren sollten… Mein Antwortcode hier zeigt nur eine Möglichkeit, dies zu tun.

    – LoicTheAztec

    20. Juli 2020 um 16:38 Uhr


1427620cookie-checkHolen Sie sich das Steueretikett pro Bestellposition in Woocommerce 3

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

Privacy policy