在结帐页面上,我添加了一个用于产品的其他塑料袋的输入框(用户可以选择要添加的塑料袋的数量),并且当用户在此处更改数量时,我想动态地为购物车加油
我正在主题script.js上使用ajax:
$(document).on('change', '#additionalBagsSize', function(event) {
event.preventDefault()
let data = {
action : 'my_action',
id : 1
}
$.post(ajaxurl, data, function(response) {
// no response needed here
});
})
在wordpress functions.php中:
add_action( 'wp_ajax_my_action', 'my_action_callback' );
function my_action_callback() {
WC()->cart->total = WC()->cart->total + 1000;
echo WC()->cart->total;
}
我还尝试添加“费用”:
function my_action_callback() {
global $woocommerce;
$woocommerce->cart->add_fee( 'Surcharge', 500, true, '' );
echo WC()->cart->total;
}
添加1000仅用于测试目的,不幸的是,它不会更新购物车。是否可以通过编程方式控制购物车数量并实时更新以供用户查看?
答案 0 :(得分:1)
在ajax响应中添加以下行以刷新购物车内容
$(document).on('change', '#additionalBagsSize', function(event) {
event.preventDefault()
let data = {
action : 'my_action',
id : 1
}
$.post(ajaxurl, data, function(response) {
jQuery(document.body).trigger('update_checkout'); //refresh the cart items and totals
});
})
答案 1 :(得分:0)
似乎woocommerce购物车的总金额是添加产品的数组(而不是字符串/整数),因此不可能仅确定新金额。
一种更好的方法是通过woocommerce插件添加您感兴趣的自定义产品,然后使用woocommerce功能在购物车中添加或删除它们。
要添加:
WC()->cart->add_to_cart($id, $count);
要删除:
WC()->cart->remove_cart_item($cart_item_key);
希望它可以帮助某人
答案 2 :(得分:0)
要添加购物车费用,请检查下面的代码,因为您必须添加某种会话,然后才能通过这种方式检查会话以添加费用
add_action( 'woocommerce_cart_calculate_fees', 'custom_function_checkout_fee', 20, 1 );
function custom_function_checkout_fee( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
$fee = WC()->session->get( 'add_fee' );
if(isset($fee) && $fee != 0 && is_numeric($fee)){
$cart->add_fee( __('Option Fee', 'woocommerce'), $fee );
}
}
add_action( 'wp_ajax_my_action', 'my_action_callback' );
function my_action_callback() {
WC()->session->set('add_fee', 500 );
}