修正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
相关产品推荐
相关产品推荐

