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

Woocommerce购物车通过PHP函数更新时偶发失效问题排查求助

问题原因定位
  • 核心问题是会话存储触发逻辑错误:你将$woocommerce->cart->set_session()放在了购物车项遍历循环内,每处理一个商品就执行一次会话写入,高频重复写入很容易触发WooCommerce会话的竞态冲突,尤其当会话存储在数据库中时,多次写入请求会互相覆盖导致数据丢失,这是你遇到50%概率清空数据的主要原因。
  • 全局变量调用不规范:循环内重复声明global $woocommerce完全冗余,WooCommerce官方推荐统一用WC()全局方法获取实例,部分场景下全局$woocommerce初始化时机异常会拿到空实例,导致自定义数据写入失败。
  • 逻辑边界缺失:代码没有对$_POST['date_week']做合法性校验,也没有提前初始化$newDate变量,当参数传递异常时,后续strtotime会返回false,最终生成的日期为空值。
  • 返回值写法异常:var_dump是直接打印输出的函数,没有返回值,你在die中拼接var_dump($cart_items)的写法会导致AJAX返回格式异常,同时你声明的$cart_items数组从未赋值,本身就是空值。
修复后的代码
<?php 
// 该函数放在主题functions.php文件中
// 统一更新购物车内所有周购商品的自提日期
add_action('wp_ajax_update_weekly_quantity_products_dates', 'update_cart_product_weekly_quantity_date');
add_action( 'wp_ajax_nopriv_update_weekly_quantity_products_dates', 'update_cart_product_weekly_quantity_date' );
function update_cart_product_weekly_quantity_date () {  
    // 提前初始化日期变量,避免未定义报错
    $newDate = '';
    if (isset( $_POST['date_week'] )) {
        // 校验时间戳参数合法性
        $timestamp = intval($_POST['date_week']);
        if ($timestamp <= 0) {
            die('日期参数不合法,更新失败');
        }
        $newDate = date('d-m-Y', $timestamp);
        // 直接获取购物车内容数组
        $cart_contents = WC()->cart->cart_contents;
        foreach( $cart_contents as $cart_item_key => $cart_item ) {
            // 修改对应自定义字段
            $cart_contents[$cart_item_key]['custom_data']['pickup_week'] = $newDate;
            $cart_contents[$cart_item_key]['custom_data']['pickup_day_of_week'] = $newDate;
        }
        // 将修改后的内容统一写回购物车
        WC()->cart->cart_contents = $cart_contents;
        // 所有修改完成后仅执行一次会话存储,避免重复写入冲突
        WC()->cart->set_session();
    }
    if (empty($newDate)) {
        die('日期更新失败:未获取到有效日期参数');
    }
    $formattedDate = date('D, M j Y', strtotime($newDate));
    die('Dates updated to '. $formattedDate);
}
额外排查点

如果修复后仍有偶发清空问题,可以检查前端是否存在重复提交的情况:比如用户点击更新按钮太快触发了多次AJAX请求,第二次请求参数异常会覆盖第一次的正常写入,给按钮加1-2秒的点击防抖即可解决。

内容的提问来源于stack exchange,提问作者Omar Shishani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:00