我的下面的代码有效,只是它不仅将带有所选变体的变量产品添加到购物车中,而且还添加相同数量的相同产品,没有变化,就好像它是一个简单的产品。
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,删除和添加返回参数等等。知道如何解决这个问题吗?
答案 0 :(得分:0)
在插件作者little chat之后,我设法使用从https://stackoverflow.com/a/27278035/601466派生的自定义端点完成了我想要的工作