Добавляйте комиссию в зависимости от способов оплаты и общего количества товаров в корзине в WooCommerce.

У меня установлен плагин ›Сборы и скидки на основе платежного шлюза для WooCommerce, который помог мне добавить две комиссии:

  • 14,99 комиссия за доставку при оплате картой

  • 19,99 стоимость доставки наложенным платежом

Проблема в том, что я хочу предоставить бесплатную доставку, если, скажем, кто-то купит более 300 штук. Поэтому мне нужно удалить дополнительные сборы. Это то, что я пробовал, но ничего не случилось:

function woo_remove_cart_fee() {

  $cart_items_total = WC()->cart->get_cart_contents_total();

    if ( $cart_items_total > 300 ) {
        $fees = 0 ;     
   } 

add_action( 'woocommerce_cart_calculate_fees', 'woo_add_remove_fee' );

Любые идеи? Или есть идеи о том, как добиться сверх лимита как платы за шлюз, так и бесплатной доставки?

Спасибо.


person Fildiroi Vladut    schedule 11.02.2021    source источник
comment
Или вы используете плагин, или вы используете собственный код, который позволяет больше настроек ... Добавление сборов, как это делает этот плагин, очень просто с помощью специального кода. См. все связанные потоки, использующие woocommerce_cart_calculate_fees в StackOverFlow.   -  person LoicTheAztec    schedule 11.02.2021
comment
Я ответил на ваш вопрос ... Любые отзывы о приведенном ниже ответе будут очень признательны, пожалуйста.   -  person LoicTheAztec    schedule 12.02.2021


Ответы (1)


Вы не можете удалить комиссии, добавленные плагином, на основе общего количества элементов корзины.

Поскольку ваш плагин не обрабатывает условие минимального или максимального количества корзины, сначала отключите от него сборы (или отключите плагин) и используйте вместо этого следующее:

add_action( 'woocommerce_cart_calculate_fees', 'fee_based_on_payment_method_and_total' );
function fee_based_on_payment_method_and_total( $cart ) {
    if ( is_admin() && ! defined('DOING_AJAX') )
        return;
        
    $threshold_amount  = 300; // Total amount to reach for no fees
    
    $payment_method_id = WC()->session->get('chosen_payment_method');
    $cart_items_total  = $cart->get_cart_contents_total();

    if ( $cart_items_total < $threshold_amount ) {
        // For cash on delivery "COD"
        if ( $payment_method_id === 'cod' ) {
            $fee = 14.99;
            $text = __("Fee");
        } 
        // For credit cards (other payment gateways than "COD", "BACS" or "CHEQUE"
        elseif ( ! in_array( $payment_method_id, ['bacs', 'cheque'] ) ) {
            $fee = 19.99;
            $text = __("Fee");
        }
    }
    
    if( isset($fee) && $fee > 0 ) {
        $cart->add_fee( $text, $fee, false ); // To make fee taxable change "false" to "true"
    }
} 

И следующий код для обновления данных об изменении способа оплаты:

// jQuery - Update checkout on payment method change
add_action( 'wp_footer', 'custom_checkout_jquery_script' );
function custom_checkout_jquery_script() {
    if ( is_checkout() && ! is_wc_endpoint_url() ) :
    ?>
    <script type="text/javascript">
    jQuery( function($){
        $('form.checkout').on('change', 'input[name="payment_method"]', function(){
            $(document.body).trigger('update_checkout');
        });
    });
    </script>
    <?php
    endif;
}

Код находится в файле functions.php активной дочерней темы (или активной темы). Проверено и работает.

связанные: Добавить комиссию в зависимости от конкретных способов оплаты в WooCommerce

person LoicTheAztec    schedule 11.02.2021