Ваш код немного устарел, и хук действия 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 вашей активной дочерней темы (или активной темы). Проверено и работает.