woocommerce_payment_complete 未在标记订单完成时触发

woocommerce_payment_complete not firing on marking order completed

我需要在订单完成时执行操作。

我试过这个:

function mysite_woocommerce_payment_complete( $order_id ) {
error_log("callback fired");
}
add_action( 'woocommerce_payment_complete', 'mysite_woocommerce_payment_complete' );

但是当我在管理订单屏幕中使用复选标记将订单标记为已完成时,

...钩子没有发射。 我也试过 woocommerce_order_status_changed,它在我下订单时执行操作,但在我标记订单已完成时不执行任何操作。

但是当我将订单标记为已完成时,我收到了关于完成订单的电子邮件。

谢谢!

编辑: 我也试过woocommerce_order_status_changed,这样:

function mysite_woocommerce_payment_complete($order_id, $old_status, $new_status ) {
    error_log("$old_status / $new_status \n");
}
add_action( 'woocommerce_order_status_changed', 'mysite_woocommerce_payment_complete', 99, 3 );

但它在购买时触发(我选择了银行转账)并显示:"pending / on-hold",但 不正确 - 请参阅 edi2 不会在手动后端更改时触发"on hold" 到 "completed"。既不通过复选标记也不在单一订单界面。

编辑2 woocommerce_order_status_changedwoocommerce_order_status_completed 有效,它只将我的测试 "error" 输出到 debug.log,而不是 error_log 出于某种原因。 我之前使用的 woocommerce_payment_complete 不适用于银行转帐等方法,因此不起作用。感谢@helgatheviking 的快速正确回答

那么完成的订单电子邮件是由以下内容触发的:

// Triggers for this email
add_action( 'woocommerce_order_status_completed_notification', array( $this, 'trigger' ) );

在源代码中 here

所有 "transactional email actions"(即:触发发送电子邮件的操作)除了正常挂钩外还得到一个 _notification 挂钩,参见 here

因此woocommerce_order_status_completed_notification是在woocommerce_order_status_completed钩子上触发的额外钩子如果woocommerce_order_status_completedwoocommerce_email_actions数组中,默认情况下。为了避免对电子邮件感到惊讶,我建议使用 woocommerce_order_status_completed 挂钩,只要订单状态发生变化,它就会被触发,包括在管理员内部,请参阅此示例:

function mysite_woocommerce_payment_complete( $order_id ) {
    error_log("callback fired");
}
add_action( 'woocommerce_order_status_completed', 'mysite_woocommerce_payment_complete' );