WooCommerce-在更新购物车项目数量时设置与新购物车项目元的会话

时间:2021-05-26 作者:photogenic

我正在尝试根据购物车项目的数量向其添加元数据。当我将产品添加到购物车时,一切正常,但当数量更新时,我无法更新购物车项目元。

我试过了

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();    
}

1 个回复
最合适的回答,由SO网友:photogenic 整理而成

我就是这样解决的。

获取购物车内容。

$cart_content = WC()->cart->cart_contents;
用新的更新版本替换购物车项目。

$cart_content[$cart_item_key] = $cart_item;
这就改变了。设置更新的购物车内容。

WC()->cart->set_cart_contents($cart_content);