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

WooCommerce支付插件HPOS兼容改造:自定义代码无法正常运行求助

WooCommerce HPOS兼容改造:支付信息存取代码修复

问题分析

你修改后的代码存在两处关键错误,导致无法正常运行:

  1. 保存支付信息方法错误:
    • wc_get_order() 仅需传入订单ID作为参数,你错误地将$payment_info当作第二个参数传入,无法正确获取订单对象。
    • 使用get_meta()(用于读取元数据)而非update_meta_data()(用于写入元数据),根本没有把支付信息保存到订单中。
  2. 获取支付信息方法错误:
    • $order->get_meta( self::$payment_info_key, true ) 第二个参数为true时,返回的是单个值而非数组,不需要取$data[0],这会导致取值逻辑错误。

修正后的代码

保存支付信息方法

/**
 * 保存支付信息
 *
 * @param int $order_id
 * @param mixed $payment_info
 */
public static function save_payment_info( $order_id, $payment_info ) {
    $order = wc_get_order( $order_id );
    if ( $order ) {
        $order->update_meta_data( self::$payment_info_key, $payment_info );
        $order->save();
    }
    return true;
}

获取支付信息方法

/**
 * 获取支付信息
 *
 * @param int $order_id
 */
public static function get_payment_info( $order_id ) {
    $order = wc_get_order( $order_id );
    if ( ! $order ) {
        return false;
    }
    
    $data = $order->get_meta( self::$payment_info_key, true );
    return ! empty( $data ) ? $data : false;
}

额外说明

  • 新增订单对象存在性检查,避免因订单不存在触发报错。
  • 严格遵循WooCommerce HPOS(自定义订单表)的API规范,用订单对象的update_meta_data和get_meta方法替代旧的update_post_meta/get_post_meta,确保同时兼容传统订单表和HPOS模式。

内容的提问来源于stack exchange,提问作者Der Fred

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:30:06