WooCommerce以编程方式获得购物车ID

时间:2017-05-14 22:50:35

标签: php wordpress woocommerce cart

我正在为WooCommerce开发一个插件。

在我的后端API服务器(不是我的Wordpress服务器,而是另一台维护购物车记录副本的服务器)我需要一种方法来判断我正在处理的购物车是否与以前相同(购物车项目或详细信息)本来可以改变,但就使用我的WP网站的消费者可以告诉他们仍然处于相同的购物车体验中而言。

我需要一些能作为购物车唯一标识符的东西。

据我所知,WC_Cart对象上没有明确的ID,
有一个很好的合理方法来推导出一个吗?

注意:我知道可以使用generate_cart_id()获取购物车中产品系列的唯一ID(如this question中所述),但是我是我在这里寻找购物车本身的标识符

2 个答案:

答案 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解决方案,但我有点害怕扩展核心类