时间:2024-03-29
本文将介绍如何让非下载虚拟商品也支持自动完成功能。默认情况下,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不提供一个选项来支持这样的功能,非要让我们自己动手。
Copyright © 2019-2024 thinkphp.xyz