有条件的结账费用基于复选框价值 - WooCommerce

问题描述 投票:0回答:1

我在结帐流程的帐单邮寄地址部分有一个自定义用户元字段的复选框。当我选中复选框时,我正在尝试动态地向结帐总额添加费用,或者在这种情况下,=='1'。

我的尝试:

add_action( 'woocommerce_cart_calculate_fees','ups_yes_no_fee', 43, 1 );
function ups_yes_no_fee( $wc_cart ) {
    global $woocommerce;

    if($_POST['billing_ups_yn'] == '1'){
        //echo 'checked';
        $woocommerce->cart->add_fee( __('Own Account Shipping', 'woocommerce'), 20 );

    }
}

如果我删除“if”语句,它将收取费用,因此我猜这是基于结帐字段申请费用的错误方式。我怎么能做到这一点?

php ajax wordpress woocommerce checkout
1个回答
0
投票

我找到了答案here

这是我的问题的解决方案:

add_action( 'wp_footer', 'woocommerce_add_ups_y_n', 357 );
function woocommerce_add_ups_y_n() {
    if (is_checkout()) {
    ?>
    <script type="text/javascript">
    jQuery( document ).ready(function( $ ) {
        jQuery('#billing_ups_yn').click(function(){
            jQuery('body').trigger('update_checkout');
        });
    });
    </script>
    <?php
    }
}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_ups_y_n_fee', 43, 1);
function woo_add_cart_ups_y_n_fee( $cart ){
        if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) {
        return;
    }

    if ( isset( $_POST['post_data'] ) ) {
        parse_str( $_POST['post_data'], $post_data );
    } else {
        $post_data = $_POST;
    }

    if (isset($post_data['billing_ups_yn'])) {
        $extracost = 25;
        WC()->cart->add_fee( 'Own UPS Account', $extracost );
    }

}

(放入子主题的functions.php文件)

© www.soinside.com 2019 - 2024. All rights reserved.