我正在尝试将可变产品添加到Wordpress插件Woocommerce的购物车中。
到目前为止,我已经能够添加单个/简单产品:
$woocommerce->cart->add_to_cart( [product_id], [quantity] );
但是,在函数签名处查看WC_Class:
function add_to_cart( $product_id, $quantity = 1, $variation_id = '', $variation = '', $cart_item_data = array() ) {
我们可以清楚地看到该函数允许使用variation_id的输入。
我尝试了以下几行中的每个空值和整数组合:
$woocommerce->cart->add_to_cart( 24, 1, 28, null, null );
等等无济于事。
我也试过自己的hacky方法试图重新创建由Woocommerce自己的产品页面发布的帖子事件,再次没有运气。
<a id="buy_v" href="#">Buy Variable Product !</a>
<script>
$('#buy_v').click(function(e) {
e.preventDefault();
addToCartV(24,26,'Red',1);
return false;
});
function addToCartV(p_id, v_id, c, q) {
$.ajax({
type: 'POST',
url: '/wp/?product=tee1&add-to-cart=variation&product_id='+p_id,
data: { 'attribute_colour': c,
'variation_id': v_id,
'quantity': q,
'product_id': p_id},
success: function(response, textStatus, jqXHR){
// log a message to the console
console.log("It worked!");
}/*,
dataType: 'JSON'*/
});
}
</script>
有人可以建议我哪里出错吗?感谢。
答案 0 :(得分:13)
上述示例实际上都运行良好,它们只是无法在Woocommerce自己的购物车中正确显示。
要使它们正确显示,请为第四个参数传入一个数组,该数组似乎代表了Woocommerce自己的购物车中的变体:
$arr = array();
$arr['Color'] = 'Green';
$woocommerce->cart->add_to_cart( 24, 1, 28, $arr, null );
答案 1 :(得分:2)
对于其他尝试类似事物的人来说,这是我的方法。
我创建了一个通过ajax调用的脚本,其中包含以下内容:
<?php
require_once("../../../wp-blog-header.php");
header("HTTP/1.1 200 OK");
global $woocommerce;
$quantity = (isset($_REQUEST['qty'])) ? (int) $_REQUEST['qty'] : 1;
$product_id = (int) apply_filters('woocommerce_add_to_cart_product_id', $_REQUEST['pid']);
$vid = (int) apply_filters('woocommerce_add_to_cart_product_id', $_REQUEST['vid']);
if ($vid > 0) $woocommerce->cart->add_to_cart( $product_id, $quantity, $vid );
else $woocommerce->cart->add_to_cart( $product_id, $quantity );
这成功地将产品变体添加到购物车