对于银行转账(bacs)付款方式,由于店长通过改变订单状态手动确认订单支付,所以需要使用特殊的
woocommerce_order_status_changed
钩子。
成功订单的状态可以从
更改但是,每个成功的订单只能触发一次该操作。
我尝试通过检查订单的付款日期来实现此目的
&& ! $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
}
}
要让某些代码在此函数中只执行一次,您需要像这样标记顺序:
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 文件中。应该可以。