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

基于Mollie支付状态更新WooCommerce订单自定义元数据求助

修复WooCommerce Mollie支付状态同步自定义字段代码

原代码问题分析

  • 触发时机错误:woocommerce_checkout_update_order_meta钩子在订单刚创建时执行,此时支付流程尚未完成,Mollie的支付状态字段还未更新,无法获取正确的支付状态。
  • 方法调用错误:$order->get_mollie_paid_and_processed()并非WooCommerce或Mollie官方提供的标准方法,无法正确读取支付状态标记。

修复方案一:基于WooCommerce订单状态变更钩子

利用订单状态变更触发更新,适配所有支付方式的状态逻辑:

add_action( 'woocommerce_order_status_changed', 'update_custom_is_order_paid_field', 10, 4 );

function update_custom_is_order_paid_field( $order_id, $old_status, $new_status, $order ) {
    // 定义已支付状态集合,可根据业务调整
    $paid_statuses = array( 'processing', 'completed' );
    
    if ( in_array( $new_status, $paid_statuses ) ) {
        update_post_meta( $order_id, 'custom_is_order_paid', '1' );
    } elseif ( in_array( $new_status, array( 'pending', 'failed', 'cancelled' ) ) ) {
        update_post_meta( $order_id, 'custom_is_order_paid', '0' );
    }
}

修复方案二:基于Mollie专属支付状态钩子(精准适配)

直接监听Mollie支付状态更新事件,仅针对Mollie支付订单生效:

add_action( 'mollie_payment_status_updated', 'update_custom_is_order_paid_field', 10, 2 );

function update_custom_is_order_paid_field( $payment, $order ) {
    $order_id = $order->get_id();
    $mollie_status = $payment->getStatus();
    
    // 根据Mollie官方支付状态映射自定义字段
    if ( in_array( $mollie_status, array( 'paid', 'authorized' ) ) ) {
        update_post_meta( $order_id, 'custom_is_order_paid', '1' );
    } elseif ( in_array( $mollie_status, array( 'failed', 'expired', 'canceled' ) ) ) {
        update_post_meta( $order_id, 'custom_is_order_paid', '0' );
    }
}

补充:若需依赖_mollie_paid_and_processed元字段

如果业务必须基于该字段判断,可在上述钩子中替换判断逻辑:

$mollie_paid_flag = get_post_meta( $order_id, '_mollie_paid_and_processed', true );
update_post_meta( $order_id, 'custom_is_order_paid', $mollie_paid_flag === '1' ? '1' : '0' );

内容的提问来源于stack exchange,提问作者Jeriss Cloud Center

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 05:12:40