WooCommerce在下订单时不保存add_fee

时间:2014-12-12 00:46:14

标签: ajax wordpress woocommerce

我正在尝试这样做,当我在结账时从下拉框中选择时,会收取费用。 我有一个ajax请求,它返回带有计算费用的信息,这也会更新当前的结账页面。但是一旦我下订单,费用便消失了。在ajax请求之后添加费用的正确方法是什么?

我的ajax请求:

var data = {
            action: 'woocommerce_update_order_review',
            security: wc_checkout_params.update_order_review_nonce,
            add_order_fee: '55.00',
            post_data: $( 'form.checkout' ).serialize()
        };

        $.ajax({
                type:       'POST',
                url:        wc_checkout_params.ajax_url,
                data:       data,
                success:    function( response ) {
                        if ( response ) {

                    var order_output = $(response);
                    $( '#order_review' ).html( $.trim( response ) );
                    $('body').trigger('updated_checkout');
                    console.log(response)
                            }

                },
                error: function(code){
                    console.log('ERROR');
                },
                dataType: 'html'
            });

和我的插件功能

add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );

function woo_add_cart_fee(){
global $woocommerce;
    if(isset($_POST['add_order_fee']))
    {

        $woocommerce->cart->add_fee( 'Same Day Shipping', '55.00', true, 'standard' );
    }
}

2 个答案:

答案 0 :(得分:0)

我在其中一个插件中运行了类似的代码,这会增加Checkout的费用。你的代码似乎执行得很好。我删除了$ _POST [' add_order_fee']条件&它在结帐页面以及下订单的页面上添加了费用。

我注意到一件事:

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

我在我的插件中使用:

jQuery("body").trigger("update_checkout");

注意' update_checkout' v / s' updated_checkout'在你的代码中。也许这可能导致这个问题。

答案 1 :(得分:0)

我已经有类似的问题了。 当您发送第一个ajax时,系统将通过调用" update_checkout"添加费用和第二个ajax。费用不会增加,因为没有$ _POST。 所以我的解决方案是在会话中添加WC费用,并在" update_checkout"调用。这是我在我的插件中使用的代码:

add_action( 'woocommerce_cart_calculate_fees', array($this,'calFee') );
public function calFee() {
    if ( isset( $_SESSION[ $this->id . '_cart_fees' ] ) ) {
        WC()->cart->fees = $_SESSION[ $this->id . '_cart_fees' ];
    }
}

请注意,您必须启用session_start。

add_action('init', array($this,'register_my_session'));
function register_my_session()
    {
        if( !session_id() )
        {
            session_start();
        }
    }