Holen Sie sich den Steuersatz separat für jeden Warenkorb und bestellen Sie Artikel in Woocommerce

Lesezeit: 3 Minuten

Holen Sie sich den Steuersatz separat fur jeden Warenkorb und
Herr Woyng

Ich möchte die Warenkorbanzeige (und später die Rechnung) so ändern, dass für jedes Produkt eine weitere Spalte mit der Steuer und dem Steuersatz angezeigt wird. Ich habe keine Funktion oder einen Getter für den Steuersatz als Zahl gefunden, nur den Namen, mit $_product->get_tax_class(). Ich habe nach einer Funktion wie $_product->get_tax_rate() gesucht, aber keine gefunden. Also habe ich einen schrecklichen Workaround in woocommerce/templates/cart/cart.php geschrieben.

Nach dem einfachen Teil des Hinzufügens

<th class="product-tax"><?php esc_html_e( 'Tax', 'woocommerce' ); ?></th>

in Zeile 35 habe ich ab Zeile 121 hinzugefügt:

$tax_name = apply_filters( 'woocommerce_cart_item_tax', $_product->get_tax_class(), $cart_item, $cart_item_key );
if ($tax_name == "reduced-tax-rate") $tax_rate= 7; else $tax_rate= 19;                      
$with_tax = $_product->get_price( $_product ); 
$without_tax = $with_tax/((100+$tax_rate)/100);
$tax = $with_tax-$without_tax;
$tax = $tax*$cart_item['quantity'];
$tax = number_format($tax, 2, '.', '')." €";
echo "  ".$tax." (".$tax_rate."%)";

Das funktioniert vorerst, aber nur in Deutschland, und würde natürlich nicht sehr lange überleben. Also, was ist der bessere Weg, dies zu tun?

Danke!

AKTUALISIEREN

Gerade die halbe Lösung gefunden:

$tax_name = apply_filters( 'woocommerce_cart_item_tax', $_product->get_tax_class(), $cart_item, $cart_item_key );
if ($tax_name == "reduced-tax-rate") $tax_rate= 7; else $tax_rate= 19;                      
echo "  ".$cart_item['line_subtotal_tax']." (".$tax_rate."%)";

$cart_item[‘line_subtotal_tax’] enthält den Wert, den ich durch Berechnung erhalten wollte. Jetzt fehlt nur noch der Name…”19%” oder “7%”…

Holen Sie sich den Steuersatz separat fur jeden Warenkorb und
LoicTheAztec

Oktober-Update 2020 (einige Fehler entfernt – Getestet auf WooCommerce 4.5.x Version)

ich vermute das woocommerce_cart_item_tax ist ein benutzerdefinierter Haken, da ich ihn nicht gefunden habe …

Die Steuern hängen von Ihren Einstellungen ab, die eine oder mehrere Steuerklassen sind, und für jede Steuerklasse:

  • alle Länder oder/und nach Ländern
  • alle Bundesländer eines Landes oder/und nach Bundesländern
  • alle Postleitzahlen eines Landes oder/und nach Postleitzahl
  • ein oder mehrere Steuersätze.
  • (und andere Einstellungen)

Nun, um Steuern richtig zu handhaben, werden Sie verwenden der WC_Tax Objektklasse und alle zugehörigen Methoden. Wir verwenden hier nur länderbasierte Steuersätze:

 // Getting an instance of the WC_Tax object
 $wc_tax = new WC_Tax();

// Get User billing country
$billing_country = WC()->customer->get_billing_country();

// Get the item tax class (your code)
$tax_class = apply_filters( 'woocommerce_cart_item_tax', $_product->get_tax_class(), $cart_item, $cart_item_key );

// Get the related Data for Germany and "default" tax class
$tax_data = $wc_tax->find_rates( array('country' => $billing_country, 'tax_class' => $tax_class ) );

// Get the rate (percentage number)
if( ! empty($tax_data) ) {
    $tax_rate = reset($tax_data)['rate'];

    // Display it
    printf( '<span class="tax-rate">' . __("The tax rate is %s", "woocommerce") . '</span>',  $tax_rate . '%' );
}

Getestet und funktioniert.


Für Bestellungen (pdf-Rechnung) es sollte etwas sehr ähnliches sein, wo Sie diese Zeile ersetzen müssen:

// Get the item tax class (your code)
$tax_class = apply_filters( 'woocommerce_cart_item_tax', $_product->get_tax_class(), $cart_item, $cart_item_key );

durch so etwas wie (wo $item ist die Instanz der WC_Order_Item_Product Objekt):

// Get the WC_Product Object instance
$_product = $item->get_product();

// Get the item tax class
$tax_class = $_product->get_tax_class();

1001540cookie-checkHolen Sie sich den Steuersatz separat für jeden Warenkorb und bestellen Sie Artikel in Woocommerce

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

Privacy policy