昨天一位朋友咨询奶爸,他用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自动完成订单的方法了,希望对你有所帮助。


评论已关闭
本文的评论功能已关闭,如有问题欢迎通过其他方式联系我们。