我需要在订单完成时执行操作。
我试过这个:
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 );
但它会在购买时触发(我选择银行转帐)并显示:"待处理/暂停",但不正确 - 请参阅edi2 不会触发手动后端从"暂停变换"到"完成"。无论是通过复选标记还是单一订单界面。
EDIT2
woocommerce_order_status_changed
和woocommerce_order_status_completed
有效,它仅仅是我的测试结果"错误"到debug.log,而不是出于某种原因的error_log。
我之前使用的woocommerce_payment_complete
不适用于银行转帐等方法,这就是为什么不起作用的原因。感谢@helgatheviking提供快速正确的答案
答案 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_completed
是woocommerce_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' );