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

使用woocommerce_new_order_item钩子保存订单项元数据失败求助

解决WooCommerce订单项元数据保存失败的问题

嘿,我来帮你搞定这个WooCommerce订单项元数据的问题!你的代码没生效主要有两个关键原因,咱们一步步梳理解决:

问题根源分析

  1. 钩子参数不匹配
    woocommerce_new_order_item 钩子的回调参数和你之前用的旧钩子完全不一样!它默认传递三个参数:$item_id(订单项ID)、$item(WC_Order_Item 对象实例)、$order_id(订单ID)。你代码里写的$values根本不存在,这直接导致你拿不到想要的adults_qty数据。

  2. 调用了废弃函数
    wc_add_order_item_meta 早就被WooCommerce标记为废弃函数了,现在官方推荐用WC_Order_Item对象的内置方法来管理元数据,这样更稳定也符合最新规范。

修正后的完整代码

假设你已经通过购物车环节收集到了adults_qty数据,下面是修正后的代码:

/**
 * 添加成人数量到订单项元数据
 * @param int $item_id 订单项ID
 * @param WC_Order_Item $item 订单项对象
 * @param int $order_id 订单ID
 * @return void
 */
function cart_add_meta_data_booking( $item_id, $item, $order_id ) {
    // 从订单项关联的购物车数据中获取成人数量
    $cart_item_data = $item->get_meta('_cart_item_data');
    $adults_qty = isset($cart_item_data['adults_qty']) ? $cart_item_data['adults_qty'] : '';

    // 如果存在有效数据,添加到订单项元数据
    if ( ! empty( $adults_qty ) ) {
        // add_meta_data方法:参数1=元数据键名,参数2=值,参数3=true表示在前台订单页显示
        $item->add_meta_data( 'Adults', $adults_qty, true );
        // 必须调用save()方法保存更改
        $item->save();
    }
}
// 注意第四个参数设为3,这样才能接收钩子传递的3个参数
add_action( 'woocommerce_new_order_item', 'cart_add_meta_data_booking', 10, 3 );

补充:如果还没在购物车保存数据

如果你还没在购物车阶段把adults_qty存起来,得先加这段代码确保数据能从购物车传递到订单项:

/**
 * 把成人数量保存到购物车项数据中
 * @param array $cart_item_data 购物车项数据数组
 * @param int $product_id 产品ID
 * @param int $variation_id 变体ID
 * @return array
 */
function save_adults_qty_to_cart( $cart_item_data, $product_id, $variation_id ) {
    // 假设你是通过表单POST获取成人数量,表单字段name为adults_qty
    if ( isset( $_POST['adults_qty'] ) ) {
        $cart_item_data['adults_qty'] = sanitize_text_field( $_POST['adults_qty'] );
        // 添加唯一标识,避免同一产品多次添加时数据被覆盖
        $cart_item_data['unique_key'] = md5( microtime() . rand() );
    }
    return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'save_adults_qty_to_cart', 10, 3 );

这样一套流程下来,就能顺利把成人数量从购物车传递并保存到订单项元数据里了。

内容的提问来源于stack exchange,提问作者Juan David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:18:31