1

在 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 公斤时,如何使此费用仅适用于定义的省份?

这是可能的?任何帮助表示赞赏。

4

1 回答 1

1

您的代码有点过时,并且woocommerce_cart_calculate_fees动作挂钩将WC_Cart对象作为可用参数。

global $woocommerce$woocommerce->cartor$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 文件中。测试和工作。

于 2018-10-30T22:15:10.310 回答