在 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 {
}
}
您应该尝试使用以下简化代码,该代码在订单状态更改时触发(与高性能订单存储兼容):
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
动作钩子,替换为:
woocommerce_checkout_create_order
动作挂钩 (订单创建和付款之前),woocommerce_checkout_order_created
动作挂钩 (订单创建后、付款前).