You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修正WooCommerce Session数组存储代码,实现多商品数据存储

修正WooCommerce Session存储多购物车商品数据的问题

问题描述

需要将购物车内容存储到WooCommerce Session中,期望得到包含多条商品数据的数组,示例如下:

alemaydz (
    [0] => Array
        (
            [prod_id] => 10035
            [list_cart_type] => 3
            [purchase_mode] => Buy with Credit Card
            [qty] => 4
            [variation_id] => 0
        ),
    [1] => Array
            (
                [prod_id] => 10036
                [list_cart_type] => 1
                [purchase_mode] => Buy with Credit Card
                [qty] => 1
                [variation_id] => 0
            ),
    [2] => Array
            (
                [prod_id] => 10037
                [list_cart_type] => 2
                [purchase_mode] => Buy with Credit Card
                [qty] => 1
                [variation_id] => 0
            )
)

但当前代码每次循环都会覆盖Session中的alemaydz值,最终仅保留最后一条商品数据:

Alemaydz (
    [2] => Array
            (
                [prod_id] => 10037
                [list_cart_type] => 2
                [purchase_mode] => Buy with Credit Card
                [qty] => 1
                [variation_id] => 0
            )
)

当前使用的错误代码:

$cnt=0;
foreach ($cart_contents as $ca) {
        $cnt++;
        WC()->session->set('alemaydz', array(           
            $cnt    =>  array(
                'prod_id'   =>  $ca['product_id'],
                'list_cart_type'    =>  $ca['list-cart-type'],
                'purchase_mode' =>  $ca['purchase-mode'],
                'qty'   =>  $ca['quantity'],
                'variation_id'  =>  $ca['variation_id']                 
            )
        ));
    }

错误原因

每次循环执行WC()->session->set('alemaydz', ...)时,都会完全替换Session中alemaydz对应的值,而不是在原有数组基础上追加新元素。因此循环结束后,只会保留最后一次循环设置的单条商品数据。

修正后的代码

先初始化一个空数组,在循环中把每个商品的数据添加到数组中,最后一次性将完整数组存入Session:

// 初始化空数组
$alemaydz_cart = array();
$cnt = 0;

foreach ($cart_contents as $ca) {
    // 将当前商品数据添加到数组
    $alemaydz_cart[$cnt] = array(
        'prod_id'         => $ca['product_id'],
        'list_cart_type'  => $ca['list-cart-type'],
        'purchase_mode'   => $ca['purchase-mode'],
        'qty'             => $ca['quantity'],
        'variation_id'    => $ca['variation_id']                 
    );
    $cnt++;
}

// 一次性将完整数组存入Session
WC()->session->set('alemaydz', $alemaydz_cart);

如果希望数组索引从0开始自动递增,也可以简化为:

$alemaydz_cart = array();

foreach ($cart_contents as $ca) {
    // 直接追加元素,索引自动从0开始递增
    $alemaydz_cart[] = array(
        'prod_id'         => $ca['product_id'],
        'list_cart_type'  => $ca['list-cart-type'],
        'purchase_mode'   => $ca['purchase-mode'],
        'qty'             => $ca['quantity'],
        'variation_id'    => $ca['variation_id']                 
    );
}

WC()->session->set('alemaydz', $alemaydz_cart);

验证结果

执行修正后的代码后,Session中的alemaydz会存储包含所有购物车商品的数组,与预期输出一致。

内容的提问来源于stack exchange,提问作者joel alemaida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:32:05