WooCommerce:自动完成付款订单(取决于付款方式)

通常wooCommerce应该自动完成虚拟产品的订单。 但是这不是,这是一个真正的问题,甚至是一个BUG。

所以在这一点上,你可以find索姆河有用的东西(但不是很方便):

1)一段代码 (你可以在wooCommerce文档中find):

/** * Auto Complete all WooCommerce orders. */ add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order'); function custom_woocommerce_auto_complete_order( $order_id ) { if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); $order->update_status( 'completed' ); } 

但是这个片段不适用于BACS *付款交付支票付款方式。 Paypal和信用卡网关付款方式没关系。

* BACS 是直接银行转帐付款方式

而且…

2)插件: WooCommerce自动完成订单

此插件适用于所有付款方式, 但不适用于其他信用卡网关付款方式

我的问题:

使用(作为基础)wooCommerce片段的第1点:

我如何实现基于woocommerce付款方式的条件代码?

我的意思是:如果付款方式不是“BACS”,“按期付款”和“支票”,则应用代码段代码(更新状态为“已完成”,以获得有关虚拟产品的付款订单)。

我不是一个wooCommerce巨型专家编码器,所以我还没有find如何针对woocommerce订单中的付款方式。

一些帮助将是非常好的。

谢谢。

我find了解决这个问题的方法(适用于WC 3.0+)

 /** * AUTO COMPLETE PAID ORDERS IN WOOCOMMERCE */ add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 ); function custom_woocommerce_auto_complete_paid_order( $order_id ) { if ( ! $order_id ) return; $order = wc_get_order( $order_id ); // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods. if ( ( 'bacs' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cod' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cheque' == get_post_meta($order_id, '_payment_method', true) ) ) { return; } // "completed" updated status for paid Orders with all others payment methods else { $order->update_status( 'completed' ); } } 

在这篇文章的帮助下: 如何通过ID检查WooCommerce订单上的付款方式?

用这个: get_post_meta( $order_id, '_payment_method', true ); 从helgatheviking

银行电汇,货到付款和支票付款方式被忽略,并保持原来的订单状态。

谢谢

更新了与​​WC 3.0+兼容的代码(2017-06-10)