根据 Mollie 付款状态更新 WooCommerce 订单自定义元数据

问题描述 投票:0回答:1

在 WooCommerce 中,我使用 Mollie 在线付款。我尝试使用以下代码来根据订单付款的状态更新自定义订单字段,但它不起作用。

有什么帮助可以修复此代码吗?

add_action( 'woocommerce_checkout_update_order_meta', 'update_custom_is_order_paid_field' );

function update_custom_is_order_paid_field( $order_id ) {
    
    // Get the order object
    $order = wc_get_order( $order_id );

    // Get the payment method
    $mollie_paid_and_processed = $order->get_mollie_paid_and_processed();

    // Set the custom_is_order_paid field based on the value of '_mollie_paid_and_processed'
    if ( $mollie_paid_and_processed == '1' ) {
        update_post_meta( $order_id, 'custom_is_order_paid', '1' );
        
    } elseif ( $mollie_paid_and_processed == '0' ) {
        update_post_meta( $order_id, 'custom_is_order_paid', '0' );
        
    } else {
        
    }
}
php wordpress woocommerce orders mollie
1个回答
0
投票

您应该尝试使用以下简化代码,该代码在订单状态更改时触发(与高性能订单存储兼容)

add_action( 'woocommerce_order_status_changed', 'update_custom_order_meta_conditionally', 10, 4);
function update_custom_order_meta_conditionally( $order_id, $from_status, $to_status, $order ) {
    $order->update_meta_data( 'custom_is_order_paid', ( $order->get_mollie_paid_and_processed() ? '1' : '0' ) );
    $order->save();
}

代码位于子主题的functions.php 文件中(或插件中)。效果应该会更好。


重要提示:

自版本 3 起,WooCommerce 已逐步迁移到自定义数据库表,那么您不应该再使用 WordPress 后元函数,而是在 WC_Data

 对象上使用 
WC_Order
 CRUD 方法

你不应该再使用

woocommerce_checkout_update_order_meta
动作钩子,替换为:

© www.soinside.com 2019 - 2024. All rights reserved.