WooCommerce 订单状态挂钩未触发

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

我正在使用以下函数来检测订单是否设置为待处理。这种情况发生在支付页面和支付提供商通知之间:

add_action( 'woocommerce_order_status_pending', 'status_pending' );
function status_pending( $related_job ) {
    error_log('Triggered');
}

问题是我没有收到任何错误日志来表明该功能有效。但它变得更加疯狂。当我通过仪表板将状态从已完成更新为待处理时,会显示日志。所以我完全不知道为什么它在结账过程中不起作用。有什么建议或想法可能是什么问题吗?

php wordpress woocommerce hook-woocommerce orders
3个回答
4
投票

“待处理”订单状态是客户进入支付网关之前、订单创建后的默认订单状态。

因此,最好的方法是在订单创建后、付款方式处理之前使用挂钩:

1)首先尝试

woocommerce_checkout_order_processed
动作钩子(3个参数)

add_action( 'woocommerce_checkout_order_processed', 'order_processed_with_pending_status', 10, 3 );
function order_processed_with_pending_status( $order_id, $posted_data, $order ) {
    error_log('Triggered');
}

2) 或者尝试

woocommerce_checkout_update_order_meta
操作钩子 (2 个参数):

add_action( 'woocommerce_checkout_update_order_meta', 'order_processed_with_pending_status', 10, 2 );
function order_processed_with_pending_status( $order_id, $data ) {
    error_log('Triggered');
}

两者都应该有效......


1
投票

这是因为该钩子仅在订单状态更改时触发,而不是在订单创建时触发,还有另一个钩子可以用来检测新订单,您可以使用订单 ID 来获取订单对象,然后使用该对象来查找订单状态:

add_action( 'woocommerce_new_order', 'prefix_new_wc_order',  1, 1  );
function prefix_new_wc_order( $order_id ) {
    $order = new WC_Order( $order_id );

}

上面的钩子仅在结帐过程中触发,因此在后端创建订单不会触发它。


0
投票

有什么方法可以在 orderprocessed 挂钩上打印生成的值,我的意思是只是想检查该值是否正确

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