Php 未触发商业订单状态挂钩

Php 未触发商业订单状态挂钩,php,wordpress,woocommerce,hook-woocommerce,orders,Php,Wordpress,Woocommerce,Hook Woocommerce,Orders,我在这里使用这个小函数来检测订单是否设置为挂起。这发生在支付页面和支付提供商通知之间: add_action( 'woocommerce_order_status_pending', 'status_pending' ); function status_pending( $related_job ) { error_log('Triggered'); } 问题是,我没有得到任何错误日志,这表明该函数可以工作。但它变得更疯狂了。当我通过仪表板将状态从已完成更新为挂起时,将显示日志。所以

我在这里使用这个小函数来检测订单是否设置为挂起。这发生在支付页面和支付提供商通知之间:

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

问题是,我没有得到任何错误日志,这表明该函数可以工作。但它变得更疯狂了。当我通过仪表板将状态从已完成更新为挂起时,将显示日志。所以我完全不知道为什么它在结账过程中不起作用。有什么建议或想法吗?问题出在哪里?

这是因为钩子仅在订单状态更改时触发,而不是在订单创建时触发,还有另一个钩子可用于检测新订单,您可以使用订单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 );

}

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

这是因为钩子仅在订单状态更改时触发,而不是在订单创建时触发,您可以使用另一个钩子来检测新订单,您可以使用订单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 );

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

在客户进入支付网关之前,订单创建之后,“待定”订单状态是订单的默认状态

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

1) 首先尝试
woocommerce\u checkout\u order\u processed
操作挂钩(3个参数):

2) 或者尝试
woocommerce\u checkout\u update\u order\u meta
操作挂钩(2个参数):

这两种方法都应该有效…

在客户进入支付网关之前,即订单创建之后,“待定”订单状态是订单的默认状态

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

1) 首先尝试
woocommerce\u checkout\u order\u processed
操作挂钩(3个参数):

2) 或者尝试
woocommerce\u checkout\u update\u order\u 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');
}