昨天一位朋友咨询奶爸,他用WooCommerce自动发送卡密功能失败,付款后显示的状态是待处理,需要管理员手动在后台点发送,系统才会给客户发送邮件告知序列号。
其实导致这个问题的原因很简单,就是WooCommerce的工作流程设计是,当用户付款后,默认状态为正在处理,只有管理员处理后才会完成(因为涉及到发货什么的情况)。
不过不用担心,奶爸这里给大家分享两个有效的实现自动完成订单的方法。
方法一:使用插件
我们借助Autocomplete WooCommerce Orders这个插件来实现自动完成订单。
1、后台搜索Autocomplete WooCommerce Orders或者点击下方链接下载后安装插件。
2、激活插件,进入WooCommerce设置界面。
3、在Autocomplete Orders处设置保存即可。
Autocomplete WooCommerce Orders支持对实物订单和虚拟订单进行单独设置是否自动完成,也兼容大多数的付款接口,你可以放心使用。
如果你对这个免费的插件不满意,那么你也可以尝试官方的付费插件。
方法二:使用代码
1、把下面的代码添加到你网站主题函数文件里面,如果不会添加可以借助:安全添加代码到functions.php文件的方法:Code Snippets
add_action('woocommerce_order_status_changed', 'ts_auto_complete_by_payment_method'); function ts_auto_complete_by_payment_method($order_id) { if ( ! $order_id ) { return; } global $product; $order = wc_get_order( $order_id ); if ($order->data['status'] == 'processing') { $payment_method=$order->get_payment_method(); if ($payment_method!="cod") { $order->update_status( 'completed' ); } } }
这个代码是调用的woocommerce_order_status_changed这个hook来判断是否完成订单,只要不是货到付款的订单,则在收到付款后自动标记为已完成。
WooCommerce默认付款方式的ID,你可以自行修改上面的代码:直接银行转帐(bacs),支票付款(cheque),货到付款(cod)和PayPal(paypal)
2、下面的代码是检测是否为虚拟商品,是虚拟商品则自动完成。
add_action('woocommerce_order_status_changed', 'ts_auto_complete_virtual'); function ts_auto_complete_virtual($order_id) { if ( ! $order_id ) { return; } global $product; $order = wc_get_order( $order_id ); if ($order->data['status'] == 'processing') { $virtual_order = null; if ( count( $order->get_items() ) > 0 ) { foreach( $order->get_items() as $item ) { if ( 'line_item' == $item['type'] ) { $_product = $order->get_product_from_item( $item ); if ( ! $_product->is_virtual() ) { // once we find one non-virtual product, break out of the loop $virtual_order = false; break; } else { $virtual_order = true; } } } } // if all are virtual products, mark as completed if ( $virtual_order ) { $order->update_status( 'completed' ); } } }
好了,上面就是奶爸分享的WooCommerce自动完成订单的方法了,希望对你有所帮助。