我正在尝试这样做,当我在结账时从下拉框中选择时,会收取费用。 我有一个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' );
}
}
答案 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();
}
}