通常,wooCommerce应该自动完成虚拟产品的订单 . 但它没有,这是一个真正的问题,甚至像BUG一样 .
所以在这一点上你可以找到有用的东西(但不是很方便):
1)一个代码片段(你可以在wooCommerce docs中找到):/ **
*自动完成所有WooCommerce订单 .
- /
add_action('woocommerce_thankyou','custom_woocommerce_auto_complete_order');
function custom_woocommerce_auto_complete_order($ order_id){
if(!$ order_id){
返回;
}
$ order = wc_get_order($ order_id);
$ order-> update_status('completed');
}
但此代码段不适用于BACS *,付款时付款和支票付款方式 . 它适用于Paypal和信用卡网关支付方式 .
- BACS是直接银行转账付款方式
而......
2)插件:WooCommerce自动完成订单此插件适用于所有付款方式,但不适用于其他信用卡网关付款方式 .
我的问题:
在第1点中使用(作为基础)wooCommerce代码段:
How can i implement conditional code based on woocommerce payment methods?
我的意思是:如果付款方式不是“BACS”,“付款时付款”和“支票”,则应用代码段(对于虚拟产品的付费订单,更新状态为“已完成”) .
我不是一个wooCommerce mega expert coder,所以我还没有找到如何在woocommerce订单中定位付款方式 .
一些帮助将是非常好的 .
谢谢 .
1 回答
我找到了解决这个问题的方法(与WC 3一起使用):
代码位于活动子主题(或活动主题)的function.php文件中 .
在这篇文章的帮助下:How to check payment method on a WooCommerce order by id?
对此:
get_post_meta( $order_id, '_payment_method', true );
来自helgatheviking银行电汇,货到付款和支票付款方式被忽略,并保持原始订单状态 .
更新了与WC 3.0兼容的代码(2017-06-10)
代码位于活动子主题(或活动主题)的function.php文件中 .