Добавить плату в зависимости от высоты товаров в Woocommerce
Я пытаюсь найти функцию, которая автоматически добавляет плату в корзину, если высота продуктов в ней превышает 2,9 см.
Я использую Woocommerce для нашего простого некоммерческого магазина комиксов. В Швеции в качестве стандарта мы используем весовую перевозку груза, с крупной платой, если что-то составляет 3 см или более.
Я пытался изменить этот ответ LoicTheAztec относительно сборов, основанных на общем весе корзины, но я действительно не знаю, что я делаю, поскольку я получаю пустую страницу после сохранения кода.
Вот код, который я пытаюсь изменить:
add_action( 'woocommerce_cart_calculate_fees', 'shipping_weight_fee', 30, 1 );
function shipping_weight_fee( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Convert cart weight in grams
$cart_weight = $cart->get_cart_contents_weight() * 1000;
$fee = 50; // Starting Fee below 500g
// Above 500g we add $10 to the initial fee by steps of 1000g
if( $cart_weight > 1500 ){
for( $i = 1500; $i < $cart_weight; $i += 1000 ){
$fee += 10;
}
}
// Setting the calculated fee based on weight
$cart->add_fee( __( 'Weight shipping fee' ), $fee, false );
}
Мой опыт работы с php не больше, чем возможность вставить действия в файл functions.php моей дочерней темы.
Я ценю любую помощь, которую я могу получить.
1 ответ
Следующий код добавит определенную плату, если какой-либо элемент корзины имеет высоту до 3 см (размер единицы измерения в Woocommerce должен быть в см):
add_action( 'woocommerce_cart_calculate_fees', 'shipping_height_fee', 10, 1 );
function shipping_height_fee( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Your settings (here below)
$height = 3; // The defined height in cm (equal or over)
$fee = 50; // The fee amount
$found = false; // Initializing
// Loop through cart items
foreach( $cart->get_cart() as $cart_item ){
if( $cart_item['data']->get_height() >= $height ) {
$found = true;
break; // Stop the loop
}
}
// Add the fee
if( $found ) {
$cart->add_fee( __( 'Height shipping fee' ), $fee, false );
}
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Дополнение: Код основан на общей высоте товаров в корзине:
add_action( 'woocommerce_cart_calculate_fees', 'shipping_height_fee', 10, 1 );
function shipping_height_fee( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Your settings (here below)
$target_height = 3; // The defined height in cm (equal or over)
$total_height = 0; // Initializing
$fee = 50; // The fee amount
// Loop through cart items
foreach( $cart->get_cart() as $cart_item ){
$total_height += $cart_item['data']->get_height() * $cart_item['quantity'];
}
// Add the fee
if( $total_height >= $target_height ) {
$cart->add_fee( __( 'Height shipping fee' ), $fee, false );
}
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.