我需要在订单完成时执行操作。
我已经试过了:
function mysite_woocommerce_payment_complete( $order_id ) {
error_log("callback fired");
}
add_action( 'woocommerce_payment_complete', 'mysite_woocommerce_payment_complete' );
...钩子(Hook)没有开火。
我也尝试了 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 );
但它在购买时触发(我选择了银行转账)并显示:“待定/暂停”,但不正确 - 参见 edi2 不会在手动后端更改从“暂停”时触发”到“完成”。既不通过复选标记也不在单一订单界面。
编辑2
woocommerce_order_status_changed
和 woocommerce_order_status_completed
有效,它只将我的测试“错误”输出到 debug.log,而不是出于某种原因到 error_log。
我之前使用的 woocommerce_payment_complete
不适用于银行转账等方法,这就是它不起作用的原因。感谢@helgatheviking 快速而正确的回答
最佳答案
那么完成的订单电子邮件是由以下内容触发的:
// Triggers for this email
add_action( 'woocommerce_order_status_completed_notification', array( $this, 'trigger' ) );
如图所示here在源代码中。
所有“事务性电子邮件操作”(即:触发发送电子邮件的操作)除了正常 Hook 外还有一个 _notification
Hook ,参见 here .
因此 woocommerce_order_status_completed_notification
是在 woocommerce_order_status_completed
钩子(Hook)上触发的附加钩子(Hook) if woocommerce_order_status_completed
在 woocommerce_email_actions
数组,默认情况下。为了避免对电子邮件感到惊讶,我建议使用 woocommerce_order_status_completed
任何时候订单状态发生变化时都会触发的 Hook ,包括来自管理员的变化,请参见以下示例:
function mysite_woocommerce_payment_complete( $order_id ) {
error_log("callback fired");
}
add_action( 'woocommerce_order_status_completed', 'mysite_woocommerce_payment_complete' );
关于php - woocommerce_payment_complete 未在标记订单完成时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41535622/