You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

HPOS切换后如何修改代码在订单表中添加自定义ERP库存代码字段

HPOS切换后如何修改代码在订单表中添加自定义ERP库存代码字段

嘿,我完全懂你碰到的麻烦——自从切换到HPOS(高性能订单存储)后,原来依赖WordPress文章元数据的代码就不工作了,因为现在WooCommerce把订单数据存在专用的订单表里,不再用wp_postmeta那套了。别担心,咱们把代码改成HPOS兼容的版本就行:

修改后的完整代码

/**
* Add current SKU code (ERP Stock code) to orders to skip issues in future
*/
add_action('woocommerce_thankyou', 'add_erp_stock_code', 4);

function add_erp_stock_code($order_id) {
    // 获取HPOS兼容的订单对象
    $order = wc_get_order($order_id);
    if (!$order) return; // 确保订单对象存在,避免报错

    $sku_list = array();

    // 遍历订单中的商品项
    foreach ($order->get_items() as $item_id => $item) {
        $product = $item->get_product();
        if (!$product) continue;

        $product_id = $item->get_product_id();
        // 只处理复合产品
        if ($product->is_type('composite')) {
            $sku_list[] = array(
                "sku" => $product->get_sku(), // 改用官方推荐的get_sku()方法,兼容性更强
                "product_id" => $product_id,
            );
        }
    }

    // 检查订单元数据是否已存在,不存在则添加
    if (empty($order->get_meta('erp_stock_code'))) {
        $order->update_meta_data('erp_stock_code', $sku_list);
        $order->save(); // 必须调用save(),确保数据写入HPOS专用订单表
    }
}

关键修改点说明

  • 替换元数据操作逻辑:不再用get_post_metaupdate_post_meta这类针对文章表的函数,改用WooCommerce订单对象的get_meta()update_meta_data()方法,这是HPOS环境下操作订单元数据的标准方式
  • 增加显式保存操作:HPOS需要调用$order->save()才能把元数据写入专用订单表,原来的update_post_meta会自动处理保存,但HPOS环境下必须显式执行这一步
  • 规范属性获取方式:把直接调用$product->sku改成$product->get_sku(),这是WooCommerce官方推荐的产品属性获取方法,能适配更多场景
  • 添加安全校验:增加了订单对象和产品对象的存在性判断,避免因数据异常导致的代码报错

这样修改后,你的ERP库存代码就能正确保存到HPOS的订单表中了,以后就算订单结构有变动,基于WooCommerce官方API的代码也能保持良好兼容性~

备注:内容来源于stack exchange,提问作者Ned

火山引擎 最新活动