试玩WooCommerce,尝试在自定义api实现中调用remove项。
我可以成功获取购物车项目列表,并以类似的方式将项目添加到购物车。但是,尽管我可以找到的每个指南中的代码几乎相同,但我无法删除购物车中的物品。
我得到的购物车物品是这样的:
$ret = array();
global $woocommerce;
$items = $woocommerce->cart->get_cart();
foreach($items as $item => $values) {
$product = $values['data'];
$p = array(
'cart_item_key' => $item,
'id' => $product->get_id(),
'name' => $product->get_name(),
'slug' => $product->get_slug(),
'price' => $product->get_price(),
'description' => $product->get_description(),
'short_description' => $product->get_short_description(),
'permalink' => get_permalink( $product->get_id() ),
'quantity' => $values['quantity']
);
$ret[] = $p;
}
return $ret;
给我一个很好的干净数组,我可以在响应中看到。
然后我拿cart_item_key
并将其传递回另一种方法,如下所示:
$payload = $request->get_params();
$ret = array();
global $woocommerce;
if ($payload['cart_item_key']){
$cartItemKey = WC()->cart->find_product_in_cart( $payload['cart_item_key'] );
$woocommerce->cart->remove_cart_item( $cartItemKey );
unset( $woocommerce->cart->cart_contents[$cartItemKey] );
}
return $ret;
我可以看到$payload['cart_item_key']
确实是我希望看到传递给调用的字符串值。我还可以看到$cartItemKey
是相同的字符串值,因此,我有99.8%的把握可以传递正确的值。
remove_cart_item
和unset
方法是我见过的两种不同的实现,似乎都没有效果。我还尝试使用WC()
来代替全局$woocommerce
,以将成功率降至零。无论我是在这里再次查询购物车商品并返回它们,还是只是刷新页面,所有商品仍在购物车中。
我知道有零服务器缓存-我所知道的一切都已为此沙箱特别关闭。
更新
这似乎在新的会话中可以正常工作。出于某种原因,当我以该站点的管理员身份登录时,无法清除购物车,并且服务器上未记录任何此类错误。