WooCommerce支付插件HPOS兼容改造:自定义代码无法正常运行求助
WooCommerce HPOS兼容改造:支付信息存取代码修复
问题分析
你修改后的代码存在两处关键错误,导致无法正常运行:
- 保存支付信息方法错误:
wc_get_order()仅需传入订单ID作为参数,你错误地将$payment_info当作第二个参数传入,无法正确获取订单对象。- 使用
get_meta()(用于读取元数据)而非update_meta_data()(用于写入元数据),根本没有把支付信息保存到订单中。
- 获取支付信息方法错误:
$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
相关产品推荐
相关产品推荐

