2020 年新更新
WooCommerce 3.4 版引入了一个比woocommerce_thankyou
or更好的钩子woocommerce_thankyou_bacs
,它允许更改 BACS 付款方式的默认订单状态。
使用这个钩子将:
- 清楚地减轻必要的代码,
- 避免在下 BACS 订单时向客户发出“暂停”通知。
因此,请改用以下内容:
add_filter( 'woocommerce_bacs_process_payment_order_status','filter_bacs_process_payment_order_status_callback', 10, 2 );
function filter_bacs_process_payment_order_status_callback( $status, $order ) {
return 'processing';
}
代码位于活动子主题(或活动主题)的 functions.php 文件中。测试和工作。
原答案:
更新 (最后添加了 woocommerce 3+ 的版本)
似乎woocommerce_payment_complete_order_status
BACS 付款方式不会触发操作挂钩。
基于这个线程,'woocommerce_thankyou'
动作钩子完成了这项工作:
add_action( 'woocommerce_thankyou', 'bacs_order_payment_processing_order_status', 10, 1 );
function bacs_order_payment_processing_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}
// Get an instance of the WC_Order object
$order = new WC_Order( $order_id );
if ( ( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) && ('on-hold' == $order->status || 'pending' == $order->status) ) {
$order->update_status('processing');
} else {
return;
}
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
对于 woocommerce 3+ 版本:
这里我们使用类似的复合钩子woocommerce_thankyou_{$order->get_payment_method()}
:
add_action( 'woocommerce_thankyou_bacs', 'bacs_order_payment_processing_order_status', 10, 1 );
function bacs_order_payment_processing_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}
// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );
if ( in_array( $order->get_status(), array('on-hold', 'pending') ) ) {
$order->update_status('processing');
} else {
return;
}
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。