【问题标题】:WooCommerce successful order hookWooCommerce 成功订单挂钩
【发布时间】:2021-04-21 14:07:16
【问题描述】:

我正在尝试发送一封关于成功订单的电子邮件,所以到目前为止我一直在使用woocommerce_thankyou 挂钩,它似乎工作得很好。但是我发现即使客户尝试向外部支付网关(信用卡支付)付款,即使银行不接受付款也会触发它。

我可以使用哪个钩子来涵盖所有这些情况?

银行转账、货到付款、信用卡(仅限成功付款)?

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce orders


    【解决方案1】:

    对于所有支付网关的成功支付订单除了银行电汇、支票或货到付款,您可以使用专用的woocommerce_payment_complete hook located in WC_Order payment_complete() method 而不是更通用的挂钩woocommerce_thankyou,例如:

    add_action( 'woocommerce_payment_complete', 'action_payment_complete', 10, 2 );
    function action_payment_complete( $order_id, $order ) {
        // Here add your code
    }
    

    请注意,您可以使用已定义的 $order_id$order 函数参数。而且这个钩子只触发一次,避免重复。


    对于银行电汇 (bacs)、支票 (cheque) 或货到付款 (cod) 付款方式,当商店经理通过更改订单状态手动确认订单已付款时,您可以使用专用钩子woocommerce_order_status_changed如下。

    add_action( 'woocommerce_order_status_changed', 'bacs_cheque_cod_payment_complete', 10, 4 );
    function bacs_cheque_cod_payment_complete( $order_id, $old_status, $new_status, $order ) {
        // 1. For Bank wire and cheque payments
        if( in_array( $order->get_payment_method(), array('bacs', 'cheque') 
        && in_array( $new_status, array('processing', 'completed') 
        && ! $order->get_date_paid('edit') ) {
            // Do something
        } 
    
        // 2. For Cash on delivery payments
        if( 'cod' === $order->get_payment_method() && 'completed' === $new_status ) {
            // Do something
        } 
    }
    

    请注意,您可以使用已定义的 $order_id$order 函数参数。此钩子也会在订单状态更改时触发一次,避免重复。


    相关: After a successful payment, What hook is triggered in Woocommerce

    【讨论】:

    • 最后因为我只想用一个挂钩,所以我保留了一个谢谢,我正在检查订单是否失败(这意味着卡支付没有通过)
    • 但我猜你的解决方案也有效,所以即使我没有使用它,我也会接受这个答案
    猜你喜欢
    • 2017-06-10
    • 2020-08-17
    • 2017-09-17
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    相关资源
    最近更新 更多