2

我正在寻找通过 Ajax 添加产品变体的解决方案。

正如我发现的所有 WooCommerce 基本功能只允许将产品添加到购物车中,前提是它不是变体项目。

<?php echo woocommerce_template_loop_add_to_cart() ?>用来显示添加到购物车按钮,但此按钮是常规提交按钮。

如何使用 Ajax 添加到购物车使变量项?

4

1 回答 1

0

我为这样的可变产品创建了 AJAX 并将其添加到购物车:

抱歉耽搁了,这是扩展的答案:

我包含了一个名为 added-to-cart.js 的新 js 文件,该文件包含以下代码。有一些额外的代码用于处理弹出窗口并增加您可能想要删除的购物车计数器。

/* 开始 */

jQuery(function($) {

/* event for closing the popup */
$("div.close").hover(
                function() {
                    $('span.ecs_tooltip').show();
                },
                function () {
                    $('span.ecs_tooltip').hide();
                }
            );

$("div.close").click(function() {
    disablePopup();  // function close pop up
})

$("a.close").click(function() {
    disablePopup();  // function close pop up
});

$(this).keyup(function(event) {
    if (event.which == 27) { // 27 is 'Ecs' in the keyboard
        disablePopup();  // function close pop up
    }
});

    $("div#backgroundPopup").click(function() {
    disablePopup();  // function close pop up
});

$('a.livebox').click(function() {
    //alert('Hello World!');
return true;
});

setAjaxButtons(); // add to cart button ajax

function loading() {
    $("div.loader").show();
}
function closeloading() {
    $("div.loader").fadeOut('normal');
}

// AJAX buy button for variable products
function setAjaxButtons() {
   $('.single_add_to_cart_button').click(function(e) {
      var target = e.target;
      loading(); // loading
      e.preventDefault();
      var dataset = $(e.target).closest('form');
      var product_id = $(e.target).closest('form').find("input[name*='product_id']");
      values = dataset.serialize();

        $.ajax({
          type: 'POST',
          url: '?add-to-cart='+product_id.val(),
          data: values,
          success: function(response, textStatus, jqXHR){
                loadPopup(target); // function show popup
                updateCartCounter();
            },
        });    
      return false;
   });    

}

function updateCartCounter() {
    var counter = $('.widget_shopping_cart_content').text().replace(/\s/g, '');
    if (counter == '') {
        $('.widget_shopping_cart_content').text("1");
    }
    else {
        $('.widget_shopping_cart_content').text(++counter);
    }
}

var popupStatus = 0; // set value

function loadPopup(target) {

    var currentPopup = $(target).parents(".single_variation_wrap").find("#toPopup");
    var currentBgPopup = $(target).parents(".single_variation_wrap").find("#backgroundPopup");

    if(popupStatus == 0) { // if value is 0, show popup
        closeloading(); // fadeout loading
        currentPopup.fadeIn(0500); // fadein popup div
        currentBgPopup.css("opacity", "0.7"); // css opacity, supports IE7, IE8
        currentBgPopup.fadeIn(0001);
        popupStatus = 1; // and set value to 1
    }
}

function disablePopup() {
    if(popupStatus == 1) { // if value is 1, close popup
        $(".single_variation_wrap > div:nth-child(2)").fadeOut("normal");
        $(".single_variation_wrap > div:nth-child(4)").fadeOut("normal");
        popupStatus = 0;  // and set value to 0
    }
}
}); // jQuery End
于 2014-02-26T10:23:39.020 回答