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

时间:2017-01-08 17:31:51

标签: php wordpress woocommerce orders hook-woocommerce

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

我试过这个:

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

但是当我使用复选标记在管理订单屏幕中将订单标记为已完成时, mark order 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 );

但它会在购买时触发(我选择银行转帐)并显示:"待处理/暂停",但不正确 - 请参阅edi2 不会触发手动后端从"暂停变换"到"完成"。无论是通过复选标记还是单一订单界面。

EDIT2 woocommerce_order_status_changedwoocommerce_order_status_completed有效,它仅仅是我的测试结果"错误"到debug.log,而不是出于某种原因的error_log。 我之前使用的woocommerce_payment_complete不适用于银行转帐等方法,这就是为什么不起作用的原因。感谢@helgatheviking提供快速正确的答案

1 个答案:

答案 0 :(得分:3)

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

# Manual Redirects
RedirectMatch 301 ^/i-am-manual-redirect https://example2.com/this-is-not-the-same-URL
RedirectMatch 301 ^/i-am-manual-redirect2 https://example2.com/somewhere-else

# Fallback
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example2.com/$1 [L,R=301,NC]

在源代码中看到here

所有"交易电子邮件操作" (即:触发发送电子邮件的操作)除正常挂钩外,还会看到// Triggers for this email add_action( 'woocommerce_order_status_completed_notification', array( $this, 'trigger' ) ); 挂钩,见here

因此,如果 _notification位于woocommerce_order_status_completed_notification数组中,woocommerce_order_status_completedwoocommerce_order_status_completed挂钩上触发的附加挂钩,默认情况下是woocommerce_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' );