在woocommerce中使用Ajax将可变产品添加到购物车

时间:2016-04-27 12:17:14

标签: ajax wordpress woocommerce

我的下面的代码有效,只是它不仅将带有所选变体的变量产品添加到购物车中,而且还添加相同数量的相同产品,没有变化,就好像它是一个简单的产品。

element.on('click', 'button[type="submit"]', event => {
    event.preventDefault();

    const quantity = parseInt(element.find('input[name="quantity"]').val(), 10) || 1;
    const addToCartUrl = '/shopping-basket/?wc-ajax=add_to_cart';
    let xWWWFormUrlencodedData = `quantity=${quantity}`;

    switch (scope.singleCopy.type) {
        case 'variable': {
            if (scope.selectedVariation) {
                for (const attr of scope.selectedVariation.attributes) {
                    xWWWFormUrlencodedData += `&attribute_pa_${attr.slug}=${attr.option}`;
                }
                xWWWFormUrlencodedData += `&add-to-cart=${scope.singleCopy.id}`;
                xWWWFormUrlencodedData += `&product_id=${scope.singleCopy.id}`;
                xWWWFormUrlencodedData += `&variation_id=${scope.selectedVariation.id}`;
            }
            break;
        }
        case 'simple': {
            xWWWFormUrlencodedData += `&product_id=${scope.singleCopy.id}`;
            break;
        }
        default: {
            console.error(`Unknown product type ${scope.singleCopy.type}.`); //eslint-disable-line no-console
        }
    }

    $http.post(addToCartUrl, xWWWFormUrlencodedData, {
        withCredentials: true,
        headers: {
            'Cache-Control': 'no-cache',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            Pragma: 'no-cache'
        }
    }).success(result => {
        if (result.error) {
            console.warn('The product has been added to the cart despite that the result object indicates an error!');
            // TODO: handle error
            return;
        }
        console.log('Success.', result);
        $rootScope.$broadcast('/cart/update/add');
    }).catch(data => {
        console.error(data);
        // TODO: handle error
    });

});

如果我不发送product_id,则只有具有所选变体的变量产品被添加到购物车中(太棒了!),但结果对象表示错误(没有描述)。如果我然后导航到购物车页面,我会在ui中收到另一条错误消息:“抱歉,无法购买此产品。”

我认为我现在已经尝试了所有排列,在参数上设置变体ID而不是产品ID,删除和添加返回参数等等。知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在插件作者little chat之后,我设法使用从https://stackoverflow.com/a/27278035/601466派生的自定义端点完成了我想要的工作