您的当前位置:首页 > 知识博客 > wordpress建站

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

时间:2024-03-29

给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不提供一个选项来支持这样的功能,非要让我们自己动手。


欢迎咨询/Welcome to inquire
tel/vx:18842938855
qq:1685522781
email:1685522781@qq.com

Copyright © 2019-2024 thinkphp.xyz


Whatsapp