我在一个主题中工作,该主题使用自定义功能在商店产品页面中将商品添加到购物车。该函数添加一个元素并返回添加到购物车的当前项目数。
功能:
add_action('wp_ajax_nopriv_add_to_cart_item', 'add_to_cart_item');
add_action('wp_ajax_add_to_cart_item', 'add_to_cart_item');
function add_to_cart_item() {
global $woocommerce;
$prod_id = intval($_POST['prod_id']);
$variations=array();
$woocommerce->cart->add_to_cart( $prod_id , 1 , 0 , $variations );
echo $woocommerce->cart->get_cart_subtotal();
die();
}
当我登录时,此功能完全正常,但是当我不是它时,它返回“1”并且不会向购物车添加任何内容。
如果我转到产品页面并按下没有Ajax功能的添加到购物车按钮(是一个提交按钮),它开始工作得很好,如果我回到'商店产品,我就会加入购物车页”。
似乎Woocommerce需要初始化一些东西。
有什么想法吗? 非常感谢!
编辑:解决了!
我通过Ajax加载产品网格项,并在加载后绑定事件。我用这段代码调用了函数:
$('.grid-products .add_to_cart_button').on("click",function(e){
if($(this).hasClass('product_type_variable')){
return;
}
e.preventDefault();
var data = { 'action': 'add_to_cart_item', 'prod_id': $(this).data('product_id') };
$.post(base_url_theme +'/wp-admin/admin-ajax.php', data,
function(resp) {
if ($('.menu-buttons .cart').hasClass('hide')) {
$('.menu-buttons .cart').removeClass('hide');
};
$('.menu-buttons .cart .num-items').text(resp);
});
});
但出于任何原因如果我没有登录则无效。 我不知道为什么它不起作用,但我已经解决了它为产品按钮分配代码:woocommerce / assets / frontend / js / add-to-cart.js而不是上面的js代码。 当我没有登录时,可能需要片段或cart_hash。
谢谢!