在WooCommerce中,我需要所有订单立即进入"正在处理"状态,以便在处理订单时直接发送订单处理电子邮件。
默认情况下,此行为适用于PayPal和货到付款订单,但不适用于默认状态为 on-hold
的 BACS 和支票。
我尝试了几个这样的片段:
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_process_order' );
function custom_woocommerce_auto_process_order( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
$order->update_status( 'processing' );
}
但这不起作用,订单仍显示为"暂停"状态,并且不会发送处理电子邮件通知。现在我刚刚找到了一个这样的片段:
add_filter( 'woocommerce_bacs_process_payment_order_status', function( $status = 'on_hold', $order = null ) {
return 'processing';
}, 10, 2 );
它有效,但仅适用于"BACS"。我怎样才能调整它以也适用于"支票"订单?
过滤器钩子
woocommerce_cheque_process_payment_order_status
尚未在 WooCommerce 3.5.7 中实现 ...如果您查看位于 wooCommerce 插件中的文件:includes
>gateways
>cheque
>class-wc-gateway-cheque.php
,钩子丢失(第122
行(:$order->update_status( 'on-hold', _x( 'Awaiting check payment', 'Check payment method', 'woocommerce' ) );
但是在 Github WC 版本 3.5.7 上
class-wc-gateway-cheque.php
文件,钩子存在(第122
行(:$order->update_status( apply_filters( 'woocommerce_cheque_process_payment_order_status', 'on-hold', $order ), _x( 'Awaiting check payment', 'Check payment method', 'woocommerce' ) );
该钩子计划在下一个WooCommerce 3.6版本下可用,请参阅Woocommerce Github上的文件更改。它被标记为3.6.0-rc.2
和3.6.0-beta.1
因此,可以使用以下命令将"bacs"和"支票"付款方式的默认订单状态更改为"正在处理":
add_filter( 'woocommerce_bacs_process_payment_order_status','filter_process_payment_order_status_callback', 10, 2 );
add_filter( 'woocommerce_cheque_process_payment_order_status','filter_process_payment_order_status_callback', 10, 2 );
function filter_process_payment_order_status_callback( $status, $order ) {
return 'processing';
}
代码进入活动子主题(或活动主题(的函数.php文件。
你快到了。现在,您正在为BACS
钩子添加过滤器。Cheque
付款方式也有类似的钩子。
只需添加以下代码:
add_filter(
'woocommerce_cheque_process_payment_order_status',
function( $status = 'on_hold', $order = null ) {
return 'processing';
}, 10, 2
);
它的作用完全相同,但仅适用于Cheque
订单。