Woocommerce - 将商品添加到购物车 - 将其添加到全球所有会话

时间:2018-01-24 01:20:01

标签: php wordpress session woocommerce

致力于WP Woocommerce,

如果我使用https://url/?add-to-cart=1561&quantity=4添加项目 无论我是否登录,我都会在网站上的每个其他会话中看到每个购物车中的项目。

例如:我在浏览器中添加项目(未登录),我在另一个浏览器上看到该产品。

我试过了,

  • 关闭除woocommerce和max menu之外的所有插件
  • 切换到默认主题
  • 在浏览器中调用网址而不是点击事件

所有访问该网站的所有人都会获得一个“全球共享”购物车。

任何帮助或建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我一起解决了一个似乎可以解决我的问题的解决方案。

看起来我的WC会话总是设置一个唯一的客户ID,这个问题与购物车本身被用于多个客户ID有关。

我的解决方案:

我使用客户ID的密钥设置会话变量,然后将所有购物车项目分配给变量。

 $id = WC()->session->get_customer_id();
 WC()->session->set($id, $my_cart);

每次购物车都添加了商品时,(例如:/?add-to-cart = 1561)我通过操作挂钩将该商品添加到$ my_cart变量中。

 function add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) {}
 add_action('woocommerce_add_to_cart', 'add_to_cart', 10, 6);

我基本上编写了自己的函数来添加/删除/更新连接到woocommerce动作钩子的$ my_cart。

使用了行动挂钩:

add_action('woocommerce_add_to_cart', 'add_to_cart', 10, 6);
add_action('woocommerce_remove_cart_item', 'remove_from_cart', 10, 1);
add_action('woocommerce_after_cart_item_quantity_update', 'update_cart', 10, 3);

然后在购物车页面上,我将$ my_cart中的所有商品添加到了'官方' woocommerce购物车(确保不要将它们添加到$ my_cart)以获得我想要的结果。

<强>闭合:

同样,不完全确定哪些问题首先导致了这个购物车错误(我最后的想法是在托管平台上进行某种缓存)但对于想要在woocommerce中存储特定数据的人来说这可能是一个很好的例子会话通过动作挂钩。