WooCommerce — добавление дополнительной платы в корзину на основе общего веса товаров

Мне нужно добавить заряд на общий вес товара и показать его в корзине.
Я имею в виду в корзине, при добавлении товара, я буду устанавливать дополнительную плату.

Этот заряд должен быть рассчитан следующим образом:

$extra_charge = $total_cart_weight * 0.15;

Если это возможно, как я могу достичь этого?

Спасибо

3

Решение

Вы можете легко подключить эту функцию к woocommerce_cart_calculate_fees крюк, вот так:

function weight_add_cart_fee() {

// Set here your percentage
$percentage = 0.15;

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

// Get weight of all items in the cart
$cart_weight = WC()->cart->get_cart_contents_weight();

// calculate the fee amount
$fee = $cart_weight * $percentage;

// If weight amount is not null, adds the fee calcualtion to cart
if ( !empty( $cart_weight ) ) {
WC()->cart->add_fee( __('Extra charge (weight): ', 'your_theme_slug'), $fee, false );
}
}
add_action( 'woocommerce_cart_calculate_fees','weight_add_cart_fee' );

Этот код протестирован и работает. Он идет по файлу function.php вашей активной дочерней темы или темы.

Для налоговых опций: увидеть налоговые опции метода add_fee () в зависимости от ваших глобальных налоговых настроек.

Ссылка:

1

Другие решения

Я считаю, что вы могли бы использовать этот Плагин для создания категории за дополнительную плату. Возможно, вам придется отредактировать плагин, чтобы сделать% от платы за корзину% от общей стоимости, но это не должно быть слишком сложно выяснить. Я не могу отредактировать плагин для вас, если я не знаю, откуда вы получаете вес. Вам просто нужно отредактировать файл wc-extra-fee-option.php и изменить строку 133 так, чтобы $ extra_fee_option_cost умножалось на вес вместо $ total. Вы можете сделать это, поместив вес в класс, а затем вызвать класс в строке 133. В качестве альтернативы вы можете сделать вес глобальной переменной и просто использовать эту глобальную переменную вместо $ total в строке 133. Надеюсь, это поможет!

0

По вопросам рекламы [email protected]