根据在 WooCommerce 中选择的运输方式添加费用

在 WooCommerce 中,当用户选择特定的运输方式时,我需要添加费用。

我找到了“在 Woocommerce 中根据运输方式和付款方式添加费用”的答案,这看起来是我需要的。

我已经尝试了代码并删除了我不需要的有关付款方式的部分。

问题是,当我更改运输方式时,不会增加费用,看起来我只是在会话中保留了旧值。

这是我的代码:

// Add a conditional fee

add_action( 'woocommerce_cart_calculate_fees', 'add_cod_fee', 20, 1 );

function add_cod_fee( $cart ) {

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

        return;


    $chosen_shipping_method_id = WC()->session->get( 'chosen_shipping_methods' )[0];


    var_dump($chosen_shipping_method_id); die;


    switch($chosen_shipping_method_id){

        case 'flat_rate:3': {

            $fee_text = __( "Spese per ritiro", "woocommerce" );

            $cart->add_fee( $fee_text, 12, false );

            break;

        }

        case 'flat_rate:4': {

            $fee_text = __( "Spese per consegna a domicilio", "woocommerce" );

            $cart->add_fee( $fee_text, 24, false );

            break;

        }


    }

}


// Refresh checkout on payment method change

add_action( 'wp_footer', 'refresh_checkout_script' );

function refresh_checkout_script() {

    // Only on checkout page

    if( is_checkout() && ! is_wc_endpoint_url('order-received') ) :

    ?>

    <script type="text/javascript">

    jQuery(function($){

        // On payment method change

        $('form.woocommerce-checkout').on( 'change', '.shipping_method', function(){

            // Refresh checkout

            $('body').trigger('update_checkout');

        });

    })

    </script>

    <?php

    endif;

}

它只是保留旧值 $chosen_shipping_method_id


繁星coding
浏览 241回答 1
1回答

慕工程0101907

如果您发表评论,您的代码运行良好var_dump($chosen_shipping_method_id); die;。此外,不需要jQuery 脚本,因为它用于默认情况下不更新结帐的付款方式。所以还有其他事情在你的情况下制造麻烦。现在我重新审视了你的代码(它也可以工作):// Add a conditional feeadd_action( 'woocommerce_cart_calculate_fees', 'flat_rate_based_fee', 20, 1 );function flat_rate_based_fee( $cart ) {&nbsp; &nbsp; if ( is_admin() && ! defined( 'DOING_AJAX' ) )&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; $chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );&nbsp; &nbsp; if( in_array( 'flat_rate:3', $chosen_shipping_methods ) ) {&nbsp; &nbsp; &nbsp; &nbsp; $fee = array( 'text' => __( "Spese per ritiro", "woocommerce" ), 'amount' => 12 );&nbsp; &nbsp; } elseif ( in_array( 'flat_rate:4', $chosen_shipping_methods ) ) {&nbsp; &nbsp; &nbsp; &nbsp; $fee = array( 'text' => __( "Spese per consegna a domicilio", "woocommerce" ), 'amount' => 24 );&nbsp; &nbsp; }&nbsp; &nbsp; if( isset($fee) ) {&nbsp; &nbsp; &nbsp; &nbsp; $cart->add_fee( $fee['text'], $fee['amount'], false );&nbsp; &nbsp; }}代码位于活动子主题(或活动主题)的 functions.php 文件中。测试和工作(在 Woocommerce 3.5.x 和 3.6.x 上)。查看它在此测试服务器上的实时运行情况。
打开App,查看更多内容
随时随地看视频慕课网APP