Скрыть индивидуальную стоимость доставки, если значение 0 в Woocommerce

В Woocommerce я добавил дополнительную стоимость доставки в корзину, используя платный API.

Мой код:

add_action( 'woocommerce_cart_calculate_fees', 'pt_add_handling_fee' );
function pt_add_handling_fee() {

    $title = 'Maggiorazione Isole & Calabria';

    global $woocommerce;
    $peso_totale = $woocommerce->cart->cart_contents_weight;
    $provincia = $woocommerce->customer->get_shipping_state();
    // echo 'weight'.$woocommerce->cart->cart_contents_weight;
    // echo 'price'.$woocommerce->cart->subtotal;

    // Maggiorazione 5€ ogni 100kg per la Sardegna
    if ($peso_totale > 99 && ($provincia == "CA" or $provincia == "NU")) {
        $fee = $peso_totale / 100 * 5;
    }
    // Maggiorazione 3€ ogni 100kg per la Sicilia
    if ($peso_totale > 99 && ($provincia == "AG" or $provincia == "CL")) {
        $fee = $peso_totale / 100 * 3;
    }
    // Maggiorazione 2€ ogni 100kg per la Calabria
    if ($peso_totale > 99 && ($provincia == "CZ" or $provincia == "CS")) {
        $fee = $peso_totale / 100 * 2;
    }

     $woocommerce->cart->add_fee( $title, $fee, TRUE, 'standard' );
}

Поэтому я применяю доплату для некоторых провинций, если общий вес превышает 99 кг.

Но проблема в том, что для других провинций пошлина по-прежнему применяется в размере «0 евро».

Как сделать так, чтобы этот сбор применялся только для определенных регионов, если общий вес тележки превышает 99 кг?

Возможно? Любая помощь приветствуется.


person Vincenzo Di Gaetano    schedule 30.10.2018    source источник
comment
Это непонятно, и этой простой строки кода недостаточно ... поэтому, пожалуйста, дайте использовать всю вашу подключенную функцию, лучше объяснив, что это за значение? Никто не может догадаться, что у тебя на уме.   -  person LoicTheAztec    schedule 30.10.2018


Ответы (1)


Ваш код немного устарел, а в хуке действия woocommerce_cart_calculate_fees есть объект WC_Cart в качестве доступного аргумента.

global $woocommerce на $woocommerce->cart или $woocommerce->customer теперь просто заменяются на:

  • WC()->cart (экземпляр объекта WC_Cart)
  • WC()->customer (экземпляр объекта WC_Customer)

Чтобы комиссия применялась только для ваших конкретных условий, попробуйте этот обновленный код:

add_action( 'woocommerce_cart_calculate_fees', 'conditional_shipping_surcharge', 10, 1 );
function conditional_shipping_surcharge( $cart ) {

    $targeted_weight = 100; // Define the starting targeted weight
    $cart_weight     = $cart->get_cart_contents_weight();
    $shipping_state  = WC()->customer->get_shipping_state();
    $percent         = 0; // Initializing

    if ( $cart_weight >= $targeted_weight ) {
        // 5 € of surcharge per 100kg for Sardinia
        if ( in_array( $shipping_state, array('CA', 'NU') ) ) {
            $percent = 5;
        }
        // 3 € of surcharge per 100kg for Sicily
        elseif ( in_array( $shipping_state, array('AG', 'CL') ) ) {
            $percent = 3;
        }
        // 2 € of surcharge per 100kg for Calabria
        elseif ( in_array( $shipping_state, array('CZ', 'CS') ) ) {
            $percent = 2;
        }
    }

    if( $percent > 0 ){
        // Fee calculation
        $fee = $cart_weight * $percent / 100;

        // Add calculated fee (Taxable for "standart" default tax class)
        $cart->add_fee( __("Maggiorazione Isole & Calabria", "woocommerce"), $fee, true );
    }
}

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

person LoicTheAztec    schedule 30.10.2018