foreach遍历shipping_option数组返回非指定订单对应值问题求助
问题根因
最常见的原因是$delivery_date_time数组未在处理单个订单前初始化:如果这段代码处于多订单循环处理逻辑、或者$delivery_date_time是类成员属性/全局变量,上一次订单处理后数组内残留了历史值,未清空就直接追加当前订单的配送选项名称,就会出现数据不符合预期的问题。
修复方案
在获取当前订单配送选项前,先初始化$delivery_date_time为空数组,修正后的代码如下:
// 初始化数组,清空历史残留数据 $delivery_date_time = []; $shipping_options = $order->get_items( 'shipping_option' ); foreach ( $shipping_options as $item_id => $item ) { $delivery_date_time[] = $item['name']; } $this->xml_append( $order_xml, 'CustomField2', implode( PHP_EOL, $delivery_date_time ) );
额外排查点
如果修复后仍有问题,可以按以下方向排查:
- 输出调试当前
$order的ID:var_dump($order->get_id());,确认当前处理的$order是你指定的目标订单,避免循环过程中$order变量被意外覆盖。 - 调试
$shipping_options的实际返回值:var_dump($shipping_options);,确认返回内容完全匹配当前订单的配送选项,没有被全局缓存污染。 - 如果是WooCommerce场景,检查是否有第三方插件/自定义钩子修改了配送选项
name字段的输出,导致返回值和预期不符。
内容的提问来源于stack exchange,提问作者windywah
相关产品推荐
相关产品推荐

