【问题标题】:woocommerce_payment_complete not firing on marking order completedwoocommerce_payment_complete 未在标记订单完成时触发
【发布时间】:2017-01-08 17:31:51
【问题描述】:

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

我试过这个:

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 不会触发手动后端更改从“暂停” ”到“完成”。既不是复选标记,也不是单一订单界面。

编辑2 woocommerce_order_status_changedwoocommerce_order_status_completed 有效,它只将我的测试“错误”输出到 debug.log,而不是由于某种原因而输出到 error_log。 我之前使用的woocommerce_payment_complete 不适用于银行转账之类的方法,这就是为什么它不起作用的原因。感谢@helgatheviking 提供快速正确的答案

【问题讨论】:

    标签: php wordpress woocommerce orders hook-woocommerce


    【解决方案1】:

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

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

    在源代码中看到here

    所有“事务性电子邮件操作”(即:触发发送电子邮件的操作)除了正常的钩子(见 here)外,还会获得一个 _notification 钩子。

    因此,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' );
    

    【讨论】:

    • 你说得对,这是一个懒惰的答案,只是指出我认为合适的钩子。我将尝试提出一个基本的功能示例。
    • 确实只是在 WC2.6.11 上进行了测试,当从订单概览表和编辑单个订单屏幕中将订单标记为完成时触发了该功能。我查找了 2.6.11 的源代码,woocommerce_order_status_completed 只有在订单没有 ID、旧状态等于新状态或 wp_update_post() 失败时才会触发。
    • 尝试用woocommerce_order_status_completedwoocommerce_order_status_completed_notification 替换,但没有成功,也在运行WC2.6.11:/
    • 我建议您禁用任何其他插件并恢复为默认主题。并且可能在update_status() 方法中添加更多error_log() 注释,以尝试找出失败的原因。保存车间订单元数据时调用$order->update_status()
    • 有些 error_log() 的输出如何进入 error_log 文件和一些 debug.log 很奇怪。这就是为什么我没有看到你的答案是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2012-12-21
    • 1970-01-01
    • 2019-05-18
    • 2016-02-02
    相关资源
    最近更新 更多