Zastosowałem konkretną opłatę na mój wózek Woocommerce w następujący sposób:

WC()->cart->add_fee( __( "Delivery Fee"), 50);

Powyższy kod jest taki, że oprócz ładunków sumatycznych i wysyłkowych dodaje opłatę za całą opłatę i pokazuje prawidłowo Grand Sumal.

Chcę teraz usunąć zastosowane opłaty prawidłowo, ale nie jestem w stanie tego zrobić.

Próbowałem tego, ale nie działa:

WC()->cart->remove_fees( __( "Delivery Fee"));

Oto mój pełny kod:

add_action( 'woocommerce_before_cart', 'custom_fees' );
function custom_fees() {
    // Add Fees - This WORKS
    WC()->cart->add_fee( __( "Delivery Fee"), 50);

    // Remove Fees - This DOES NOT WORK
    WC()->cart->remove_fees( __( "Delivery Fee"));
}

Jak mogę wyjąć opłaty zastosowane, bez konieczności wyczyszczenia wózka?

1
Devner 19 styczeń 2020, 23:16

1 odpowiedź

Najlepsza odpowiedź

Zależy od tego, jak tego potrzebujesz, oto jedno rozwiązanie:

add_action( 'woocommerce_before_calculate_totals', 'custom_fees' );
function custom_fees() {
    // Add Fees - This WORKS
    WC()->cart->add_fee( __( "Delivery Fee"), 50); // gets removed
    WC()->cart->add_fee( __( "Delivery Fee2"), 150); // will not be removed.

    $fees = WC()->cart->get_fees();
    foreach ($fees as $key => $fee) {
        if($fees[$key]->name === __( "Delivery Fee")) {
            unset($fees[$key]);
        }
    }
    WC()->cart->fees_api()->set_fees($fees);
}
3
Reigel 20 styczeń 2020, 02:00