Fügen Sie programmgesteuert steuerfreie Gebühren zum WooCommerce-Einkaufswagen hinzu

Lesezeit: 4 Minuten

Fugen Sie programmgesteuert steuerfreie Gebuhren zum WooCommerce Einkaufswagen hinzu
Tasos

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?

  • 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

Fugen Sie programmgesteuert steuerfreie Gebuhren zum WooCommerce Einkaufswagen hinzu
LoicTheAztec

(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):

Geben Sie hier die Bildbeschreibung ein

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;

  1. Wie Sie verwenden WC()->cart Syntax statt $woocommerce->cart Syntax, brauchst du nicht wirklich global $woocommerce;.
  2. 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

  • Hi. Vielen Dank für die ausführliche Antwort, aber ich glaube, es gab ein Missverständnis. $bookable_total war nur eine Variable, die ich in der Schleife verwende und die sich ändert, wenn es bestimmte Produkttypen gibt. Auf die Höhe der Gebühr hat dies keinen Einfluss. Aber um klar zu sein. Mein Code fügt eine Gebühr hinzu, enthält jedoch eine Steuer. Ich möchte die Gebühr steuerfrei lassen. Welcher nicht der 4 Codes tut.

    – Tasos

    12. August 2016 um 7:42 Uhr

  • @Tasos Ok, ich habe meine Antwort aktualisiert. Ihr Problem hängt sicherlich mit Ihrer Woocommerce-Website zusammen Steuereinstellungen

    – LoicTheAztec

    12. August 2016 um 14:22 Uhr


  • @Tasos Precision: In meinem realen Screenshot-Beispiel verwende ich (als französischer Kunde) 20 % des normalen Steuersatzes. Wie Sie sehen, wird die Gebühr nicht besteuert.

    – LoicTheAztec

    12. August 2016 um 14:49 Uhr

1004960cookie-checkFügen Sie programmgesteuert steuerfreie Gebühren zum WooCommerce-Einkaufswagen hinzu

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

Privacy policy