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)