仅触发 woocommerce_order_status_changed 一次

问题描述 投票:0回答:1

对于银行转账(bacs)付款方式,由于店长通过改变订单状态手动确认订单支付,所以需要使用特殊的

woocommerce_order_status_changed
钩子。

成功订单的状态可以从

更改
  1. 暂停处理,
  2. 暂停至已完成,或
  3. 等待处理完成。

但是,每个成功的订单只能触发一次该操作。


我尝试通过检查订单的付款日期来实现此目的

&& ! $order->get_date_paid('edit')
,但这似乎不是一个可行的解决方案,因为总是收到付款日期。

add_action( 'woocommerce_order_status_changed', 'bacs_payment_complete', 10, 4 );
function bacs_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') 
  && in_array( $new_status, array('processing', 'completed') 
  && ! $order->get_date_paid('edit') ) {
    // Do something
  } 
}
php wordpress woocommerce hook-woocommerce orders
1个回答
0
投票

要让某些代码在此函数中只执行一次,您需要像这样标记顺序:

add_action( 'woocommerce_order_status_changed', 'bacs_payment_complete', 10, 4 );
function bacs_payment_complete( $order_id, $old_status, $new_status, $order ) {
    // 1. For Bank wire and cheque payments
    if ( $order->get_payment_method() === 'bacs' 
    && in_array( $new_status, wc_get_is_paid_statuses() )
    && ! $order->get_meta('confirmed_paid') ) 
    {
        $order->update_meta_data('confirmed_paid', '1'); // Tag the order
        $order->save(); // Save to database

        // Here your code to be executed only once
    } 
}

代码位于活动子主题(或活动主题)的functions.php 文件中。应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.