Woocommerce“添加到购物车”不适用于Ajax

时间:2015-09-25 08:26:02

标签: php ajax wordpress woocommerce

我在一个主题中工作,该主题使用自定义功能在商店产品页面中将商品添加到购物车。该函数添加一个元素并返回添加到购物车的当前项目数。

功能:

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。

谢谢!

0 个答案:

没有答案