将默认 WooCommerce 订单状态更改为处理支票和银行付款

Posted

技术标签:

【中文标题】将默认 WooCommerce 订单状态更改为处理支票和银行付款【英文标题】:Change default WooCommerce order status to processing for cheque and bacs payments 【发布时间】:2019-09-03 11:32:30 【问题描述】:

在 WooCommerce 中,我需要我的所有订单立即进入“处理中”状态,以便在处理订单时直接发送订单处理电子邮件。

默认情况下,此行为适用于 Paypal 和 COD 订单,但不适用于 BACS 和支票,其中默认状态为 on-hold

我尝试了几个像这样的sn-ps:

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' );

但这不起作用,订单仍显示为“暂停”状态,并且未发送处理电子邮件通知。现在我刚刚找到了这个sn-p:

add_filter( 'woocommerce_bacs_process_payment_order_status', function( $status = 'on_hold', $order = null ) 
    return 'processing';
, 10, 2 );

它有效,但仅适用于“BACS”。我怎样才能使它也适用于“支票”订单?

【问题讨论】:

【参考方案1】:

你快到了。现在,您正在为 BACS 挂钩添加过滤器。 Cheque 支付方式也有类似的钩子。

只需添加以下代码:

add_filter( 
  'woocommerce_cheque_process_payment_order_status',
  function( $status = 'on_hold', $order = null ) 
    return 'processing';
  , 10, 2
);

它的作用完全相同,但仅适用于Cheque 订单。

【讨论】:

我试过了,但它不适用于支票订单!我不知道为什么,我也找到了这个过滤器,但它不起作用...... @fredrik 尝试禁用除 woocommerce 之外的所有插件,然后使用 2019 主题。或者尝试减少或增加优先级,在我的示例中为10。尝试将其设置为199【参考方案2】:

过滤器挂钩 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' ) );

但是在 class-wc-gateway-cheque.php file 的 Github WC 版本 3.5.7 上,存在挂钩 (行 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 版本see the file change on Woocommerce Github 中可用。它被标记为3.6.0-rc.23.6.0-beta.1

因此,可以使用以下命令将“bacs”和“cheque”付款方式的默认订单状态更改为“处理中”:

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';

代码进入您的活动子主题(或活动主题)的functions.php 文件中。

【讨论】:

我在新的分期付款中尝试了这个,但它不适用于支票付款。仅适用于 bacs... @fredrik 我已经更新了我的答案代码……这个钩子存在于 Github Woocommerce 3.5.7 上……但在所有已安装的 3.5.7 版本上,这个钩子都不见了。 @fredrik 因为这将在下一个版本中发布,您可以对相关的核心文件进行编辑和更改... 你是对的 Loic。我从来没想过!希望新版本快点发布! 效果很好,正是我所需要的——非常感谢!!!!【参考方案3】:

我不能 100% 确定这是否与我遇到的问题相同 - 我必须将银行转帐的订单状态更改为与通过 PayPal 付款相同。我在this plugin 的帮助下做到了。

您可以创建自定义状态并为特定网关定义默认状态。只需点击几下,我就解决了我的问题。

【讨论】:

以上是关于将默认 WooCommerce 订单状态更改为处理支票和银行付款的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce 更改订单状态 BACS 处理

支付网关的 WooCommerce 订单状态更改

WooCommerce 订单状态(自动完成订单)

更新订单 WooCommerce API PHP CURL

在 WooCommerce 电子邮件通知中将发件人名称更改为订单元数据中的值

WooCommerce 根据用户角色更改 BACS 订单状态