我正在为WooCommerce开发一个插件。
在我的后端API服务器(不是我的Wordpress服务器,而是另一台维护购物车记录副本的服务器)我需要一种方法来判断我正在处理的购物车是否与以前相同(购物车项目或详细信息)本来可以改变,但就使用我的WP网站的消费者可以告诉他们仍然处于相同的购物车体验中而言。
我需要一些能作为购物车唯一标识符的东西。
据我所知,WC_Cart对象上没有明确的ID,
有一个很好的合理方法来推导出一个吗?
注意:我知道可以使用generate_cart_id()获取购物车中产品系列的唯一ID(如this question中所述),但是我是我在这里寻找购物车本身的标识符。
答案 0 :(得分:4)
你的目标很有趣。我已经阅读了WooCommerce的代码,但遗憾的是它没有你需要的东西。
我有一个建议。这可能有所帮助。在woocommerce_init
更改WC()->cart
,将您自己的类更改为WC_Cart
。然后在你的课堂上有办法设置你的购物车ID。像下面的东西。
add_action( 'woocommerce_init', 'woocommerce_init', 30 );
function woocommerce_init() {
class myWC_Cart extends WC_Cart {
private $cart_id = 1234; // set cart id by any means necessary
public function get_cart_id() {
return $this->cart_id;
}
}
WC()->cart = new myWC_Cart();
}
这样,无论WooCommerce在哪里准备好或加载,您都可以通过调用
来获取购物车ID
WC()->cart->get_cart_id();
答案 1 :(得分:0)
我知道这是一个老问题,但是对于客户来说,我也面临类似的情况。
我正在解决将ID存储在会话中并在需要的地方检查会话变量的问题。
$new_cart = WC()->session->get('new_cart');
if( is_null($new_cart) ) {
WC()->session->set(uniqid());
}
我喜欢Reigel解决方案,但我有点害怕扩展核心类