На моем сайте WooCommerce я использую эту функцию, чтобы добавить комиссию в размере 4 €, если в качестве способа оплаты вы выберете около sh при доставке:
add_action('woocommerce_cart_calculate_fees', 'increase_cod_cost');
function increase_cod_cost() {
if(WC()->session->chosen_payment_method=='cod')
WC()->cart->add_fee(__('COD Fee'), 4);
}
Я также использую эту функцию для немедленного обновления кассы всякий раз, когда вы меняете способ оплаты таким образом, чтобы при добавлении трески комиссия добавлялась, а при выборе любого другого метода удалялась:
add_action('woocommerce_review_order_before_payment', 'custom_checkout_update');
function custom_checkout_update() {
echo '
<script type="text/javascript">
(function($){
$(\'form.checkout\').on(\'change\', \'input[name="payment_method"]\', function() {
$(\'body\').trigger(\'update_checkout\');
});
})(jQuery);
</script>
';
}
Обе функции работают на 100%.
Теперь вместо добавления Я бы хотел правильно увеличить фактическую стоимость доставки, поэтому я попробовал эту функцию вместо первой:
add_filter('woocommerce_package_rates', 'increase_cod_cost_2', 10, 2);
function increase_cod_cost_2($rates, $package) {
if(WC()->session->chosen_payment_method=='cod')
$rates['flat_rate:1']->cost=$rates['flat_rate:1']->cost+4;
return $rates;
}
Эта функция также работает, но только если я опустошу корзину и затем добавьте продукт снова. По какой-то причине он не сразу обновляет стоимость доставки всякий раз, когда я выбираю треску. Я действительно не понимаю, почему функция jQuery будет работать с первой функцией php, добавляя плату, а не с этой, изменяя стоимость доставки. Можете ли вы помочь мне и скажите, что случилось? Спасибо.