我正在尝试根据购物车项目的数量向其添加元数据。当我将产品添加到购物车时,一切正常,但当数量更新时,我无法更新购物车项目元。
我试过了
WC()->cart->cart_contents[$cart_item_key] = $cart_item;
WC()->cart->set_session();
以及
$cart_content = WC()->cart->cart_contents;
$cart_content[$cart_item_key] = $cart_item;
WC()->session->set(\'cart\', $cart_content);
在这次WooCommerce行动中。我之所以选择这个函数,是因为我的meta是基于新旧数量的比较。
woocommerce_after_cart_item_quantity_update
但这些都不起作用。有人知道我可以在哪里或如何设置更新的购物车内容吗?
这里是我的代码的超简化版本。生成元数据不是问题,而是设置问题。
add_action( \'woocommerce_after_cart_item_quantity_update\', array( $this, \'update_restock_list\'), 20, 4 );
public function update_restock_list( $cart_item_key, $quantity, $old_quantity, $cart ) {
$cart_item = $cart->cart_contents[$cart_item_key];
$id = $cart_item[\'variation_id\'] > 0 ? $cart_item[\'variation_id\'] : $cart_item[\'product_id\'];
$restock = get_post_meta( $id, \'_om_restock\', true );
if( !empty($restock) ) {
$diff = abs($quantity - $old_quantity);
$product = $cart_item[\'data\'];
$stock = $product->get_stock_quantity();
if( $quantity > $stock ) {
if( $quantity > $old_quantity ) {
$cart_item[\'restock_info\'] += $diff;
} else {
$cart_item[\'restock_info\'] -= $diff;
}
} else {
unset($cart_item[\'restock_info]);
}
}
//update the cart
$cart_content = WC()->cart->cart_contents;
$cart_content[$cart_item_key] = $cart_item;
WC()->session->set(\'cart\', $cart_content);
WC()->cart->set_session();
}