我对wordpress并不精通,但在尝试以编程方式将产品添加到购物车时,我遇到了一个奇怪的问题。
流程是这样的:
客户查看产品
通过选中复选框选项,客户可以将其他产品添加到购物车
如果确认选中了复选框,则该项目和其他项目应添加到购物车
// product_extra_item_checkbox.php
add_action('woocommerce_before_add_to_cart_button', 'product_extra_item_checkbox');
add_action('woocommerce_add_to_cart', 'add_additional_item_to_cart');
function product_extra_item_checkbox () {
echo "
<input id='_add_additional_item' type='checkbox' class='checkbox add_item' value='1' name='_add_additional_item' />
";
}
function add_additional_item_to_cart () {
global $woocommerce;
if (isset($_POST['_add_additional_item'])) {
$productId = 59;
$woocommerce->cart->add_to_cart($productId);
echo "<script>alert('ADDED ADDITIONAL PRODUCT TO CART!!!');</script>"; // debug
}
}
我确实收到了xdebug的一些投诉,说调用堆栈超出了,所以我猜这与此有关,但我不能为我的生活找出为什么整个网站崩溃时我都会崩溃。我只是想做一些以前数以百万计的事情(我已经找到了一些例子,因为Wordpress不是我强有力的一面)。
这是我的开发环境的限制,还是我做错了什么?
编辑:我在开发环境中禁用了xdebug,但网站崩溃了。
我已经测试了一些,并收到了另一条错误消息:
致命错误:允许的内存大小为536870912字节耗尽(尝试过 在1989年的... / wp-includes / taxonomy.php中分配20480字节
似乎只与$woocommerce->cart->add_to_cart($productId);
相关。
答案 0 :(得分:0)
解?
好吧,逻辑错误发生了,实际上只是我自己的愚蠢导致堆栈溢出;)
。
无限循环是因为系统一直在触发woocommerce_add_to_cart
动作(这是预期的)而且$_POST['_add_additional_item']
从未被清除过。
function add_additional_item_to_cart () {
global $woocommerce;
if (isset($_POST['_add_additional_item'])) {
unset($_POST['_add_additional_item']); // this fixed it
$productId = 59;
$woocommerce->cart->add_to_cart($productId);
}
}