WooCommerce remove_cart_item登录后不删除项目

时间:2018-08-26 19:45:19

标签: php wordpress woocommerce cart wordpress-rest-api

试玩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_itemunset方法是我见过的两种不同的实现,似乎都没有效果。我还尝试使用WC()来代替全局$woocommerce,以将成功率降至零。无论我是在这里再次查询购物车商品并返回它们,还是只是刷新页面,所有商品仍在购物车中。

我知道有零服务器缓存-我所知道的一切都已为此沙箱特别关闭。


更新

这似乎在新的会话中可以正常工作。出于某种原因,当我以该站点的管理员身份登录时,无法清除购物车,并且服务器上未记录任何此类错误。

0 个答案:

没有答案