WooCommerce支付成功后自动标记订单为已完成

文 / @WordPress主题

给WooCommerce添加自动完成功能

本文将介绍如何让非下载虚拟商品也支持自动完成功能。默认情况下,WooCommerce的虚拟下载商品在用户支持付成功后会自动标记为“已完成”。但是如果我们的虚拟商品不是可以下载的商品,如优惠券,在线充值码等等,支付成功后,订单就不能自动标记为已完成,这样的用户体验显然是不好的。下面我们来稍微给WooCommerce加点料。

如何实现

按下面代码示例,复制以下代码到主题的functions.php里面即可:

  
    add_filter('woocommerce_payment_complete_order_status','virtual_order_payment_complete_order_status',10,2);
    function virtual_order_payment_complete_order_status($order_status,$order_id){
        $order=new WC_Order($order_id);
        if('processing'==$order_status&&
            ('on-hold'==$order->status||'pending'==$order->status||'failed'==$order->status)){
            $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()){
                            //如果不是虚拟商品,完成判断,退出循环
                            $virtual_order=false;
                            break;
                        }else{
                            $virtual_order=true;
                        }
                    }
                }
            }
            //如果是虚拟商品,返回已完成
            if($virtual_order){
                return 'completed';
            }
        }
        //对于非虚拟商品,返回订单状态
        return $order_status;
    }
  

最后

其实这是一个很常见的需求,真不知道为什么WooCommerce不提供一个选项来支持这样的功能,非要让我们自己动手。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。