WooCommerce 动态附加费基于结帐中的单选按钮

WooCommerce Dynamic Surchage based on radio button in checkout

我如何获得一个单选按钮组来更新 WooCommerce 结账页面上结账总额中列出的附加费,当一个被选中时,然后另一个。选择单选按钮 A 需要增加 0.05% 作为附加费,而单选按钮 B 将增加 0.10%。

我知道我可以通过以下方式添加静态附加费:

add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
global $woocommerce;

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

// $percentage is what will change based on which button is selected A or B
// however this is not executed after the page is loaded
$percentage = 0.05;

$surcharge = ( $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total ) * $percentage;    
$woocommerce->cart->add_fee( 'Service Fee', $surcharge, true, 'standard' );

}

也许这样的事情会让你开始。我不认为它会自动添加费用,但我没有测试它,这只是一个想法:

jQuery(document).ready(function($){

    if ( typeof wc_checkout_form === 'undefined' || ) {
        return false;
    }

    $checkout_form = $( 'form.checkout' );
    $checkout_form.on( 'change', '.your_radio_buttons_class', function(){
        wc_checkout_form.wc_checkout_form();
    });

});

我相信您将需要使用 checkout script,因此您要确保在 checkout.js 之后加载您的自定义脚本。

所以我通过让 AJAX 处理按钮更改并调用设置 WC->session->set 变量的 PHP 回调来解决这个问题。然后在 AJAX 中发出 location.reload 强制 functions.php 重新加载。然后在我的附加费过滤器中检查会话变量并根据会话值添加或不添加费用。