Ich versuche, Gebühren basierend auf einigen Berechnungen hinzuzufügen, die ich im Woocommerce-Warenkorb mache, aber ich möchte sie von der Mehrwertsteuer ausschließen. Das ist mein Code:
function woo_add_cart_fee( $cart ) {
global $woocommerce; $bookable_total = 0;
foreach(WC()->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
//doing my stuff to calculate $fee variable
WC()->cart->add_fee( 'Fees: ', $fee, false, '' );
//WC()->cart->add_fee( 'Fees: ', $fee, true, '' );
//WC()->cart->add_fee( 'Fees: ', $fee, false, 'zero rate' );
//WC()->cart->add_fee( 'Fees: ', $fee, true, 'zero rate' );
}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );
Ich habe alle kommentierten Versionen ausprobiert und jede von ihnen enthält auch eine Mehrwertsteuer auf Gebühren.
Irgendeine Idee, wie ich es erreichen kann?
(Aktualisieren): STEUEROPTIONEN mit add_fee() Methode
WICHTIG: Die Tatsache, dass STEUER funktioniert oder nicht mit add_fee()
Methode kommt darauf an zuerst Ihre Steuereinstellungen im WooCommerce. Wie Sie nicht sagen in deiner frage Was sind Ihre SteuereinstellungenEs ist nicht möglich, Ihnen zu helfen (Steuereinstellungen können für jede E-Commerce-Website viel unterschiedlicher sein).
Wenn Sie zum Beispiel verwenden möchten Steuerklasse „Nullsatz“.aber Sie haben nicht die richtige Steuerklasse „Nullsatz“ für das Land des Kunden definiert, dies funktioniert nicht, wenn Sie versuchen, sie zu verwenden mit:
WC()->cart->add_fee( 'Fees: ', $fee, true, 'zero rate' );
… abhängig von Ihren globalen Steuereinstellungen.
Hier ist ein Screenshot von ECHTEN Checkout-Gesamtsummen für 3 Artikel im Warenkorb (unter Verwendung des folgenden Codes):

Klasse WC_Cart add_fee() Methode, fügt dem Warenkorb eine zusätzliche Gebühr hinzu.
add_fee( string $name, float $amount, boolean $taxable = false, string $tax_class="" )
Parameters:
$name Unique name for the fee. Multiple fees of the same name cannot be added.
$amount Fee amount.
$taxable (default: false) Is the fee taxable?
$tax_class (default: '') The tax class for the fee if taxable. A blank string is standard tax class.
Ursprüngliche Antwort (aktualisierter Code):
Ihr Hauptproblem ist in diese Linie: global $woocommerce, $bookable_total = 0;
- Wie Sie verwenden
WC()->cart
Syntax statt $woocommerce->cart
Syntax, brauchst du nicht wirklich global $woocommerce;
.
- Wenn du benutzt
global $bookable_total = 0;
Das $bookable_total
wird sein immer = 0
.
Stattdessen werden Sie verwenden global $bookable_total;
ohne Wert um den außerhalb Ihrer Funktion definierten Wert zu erhalten.
Aber wenn du willst setze den Wert auf Nullfalls nicht außerhalb Ihrer Funktion definiert ist, gehen Sie folgendermaßen vor: woo_add_cart_fee( $bookable_total=0 )
Wir können jetzt definieren $bookable_total
Variablenwert außerhalb die Funktion.
Dies ist ein funktionierendes Beispiel mit Ihrem Code:
// This variable value is passed to our function
$bookable_total = 1;
function woo_add_cart_fee( $bookable_total = 0 ) {
global $bookable_total;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// just for this example
$item_count = 0;
$item_fee = 5;
// going through each cart items
foreach( WC()->cart->get_cart() as $values ) {
$item = $values['data'];
if ( empty( $item ) )
break;
// getting the cart item_id
$item_id = $item->id;
$item_count++;
// your calculations
}
// We test $bookable_total value, defined to '1' outside our function
// and to 'O' if not defined outside (in this case the fee will be '0')
$fee = $item_count * $bookable_total * $item_fee;
// add_fee method (TAX will NOT be applied here)
WC()->cart->add_fee( 'Fees: ', $fee, false );
}
add_action( 'woocommerce_cart_calculate_fees','woo_add_cart_fee' );
Dieser Code ist getestet und funktioniert. Es geht in die function.php-Datei Ihres aktiven untergeordneten Themas oder Themas.
Wenn die $bookable_total
Variable ist außerhalb nicht definiertwird der Wert sein 0
.
Notiz: Es ist besser, die $items-IDs zu erhalten mit: $item = $values['data']; $item_id = $item->id;
Referenz:
Klasse WC_Cart – add_fee( $name, $amount, $taxable = false, $tax_class="" )
Methode
Entschuldigung für die Verspätung. Ich habe mich auch an den Woo-Commerce-Support gewandt und sie haben mir gesagt, dass mein ursprünglicher Code korrekt war und es einen möglichen Konflikt mit dem Thema oder einem anderen Plugin gibt. Ich werde es am Montag untersuchen.
– Tasos
14. August 2016 um 8:00 Uhr