WooCommerce 成功订单挂钩

时间:2021-01-16 21:17:59

标签: php wordpress woocommerce hook-woocommerce orders

我正在尝试发送关于成功订单的电子邮件,所以我一直在使用 woocommerce_thankyou 钩子,它似乎完美无缺。但我发现即使客户尝试向外部支付网关付款(信用卡付款),即使银行不接受该付款,也会触发它。

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

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

1 个答案:

答案 0 :(得分: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)、支票 (check) 或货到付款 (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