WooCommerce:自动完成付款的订单

通常,wooCommerce应该自动完成虚拟产品的订单。但是事实并非如此,这是一个实际的问题,即使是BUG之类的。

因此,在这一点上,您可以找到一些有用的东西(但不是很方便):

(您可以在wooCommerce文档中找到):

/**

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

}

但是此代码段不适用于 货到付款支票* 付款方式。Paypal和信用卡网关的付款方式都可以。

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

还有…

WooCommerce自动完成订单

该插件适用于所有付款方式, 其他 。

我的问题:

使用(作为基础)第1点中的wooCommerce代码段:

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

一些帮助将是非常好的。

回答:

(适用于WooCommerce 3及更高版本)

该过滤器钩位于:

  • WC_Order当在结帐时 时 将 类内部payment_complete()方法。 ***
  • WC_Order_Data_Store_CPT类内部update()方法。

如您所见,默认情况下, 为“处理中”和“已完成”。

说明:

由于它是一个过滤器挂钩,woocommerce_payment_complete_order_status

(不适用于“支票”,“ bacs”或“ cod”支付方式) 。在这里,我们只更改 。

因此,无需为支付网关或其他任何条件添加条件。

  1. (避免多次通知)

这是 的唯一方法:

•一个用于“正在处理”订单状态

•一个用于“已完成”订单状态。

使用下面的代码,只会将 (由付款网关为已付款订单设置) 更改为“已完成”:

add_action( 'woocommerce_payment_complete_order_status', 'wc_auto_complete_paid_order', 10, 3 );

function wc_auto_complete_paid_order( $status, $order_id, $order ) {

return 'completed';

}

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


(适用于WooCommerce 3及更高版本)

基于Woocommerce官方钩子,我找到了解决此问题的方法*(与WC 3+兼容)。

在Woocommerce对于所有其他支付网关别人比bacs(银行转账)chequecod(货到付款)

因此,我将所有付款网关(如Paypal或信用卡付款)的“处理”订单状态作为目标,以更新订单状态以完成。

编码:

add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );

function wc_auto_complete_paid_order( $order_id ) {

if ( ! $order_id )

return;

// Get an instance of the WC_Product object

$order = wc_get_order( $order_id );

// No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.

if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) {

return;

}

// For paid Orders with all others payment methods (paid order status "processing")

elseif( $order->has_status('processing') ) {

$order->update_status( 'completed' );

}

}

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


(适用于所有woocommerce版本)

编码:

/**

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

}

// For paid Orders with all others payment methods (with paid status "processing")

elseif( $order->get_status() === 'processing' ) {

$order->update_status( 'completed' );

}

}

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

银行电汇,货到付款现金和支票付款方式将被忽略,并保持其原始订单状态。

以上是 WooCommerce:自动完成付款的订单 的全部内容, 来源链接: utcz.com/qa/421974.html

回到顶部