WooCommerce非实物产品付款后订单状态变为已完成
WooCommerce默认所有产品付款成功后订单状态并不会立即变为completed已完成状态。对于实物商品交易这没什么问题,但如果是虚拟产品交易就会很不合适,比如软件下载、电子书、电子版音乐等等。虚拟产品付款后即可下载该产品完成订单,而无需快递运输到达才完成订单。因此,有必要对非实物产品交易订单状态进行修改,以适应实际需要。以下是具体实现方法:
/*
非实物产品付款后订单状态变为已完成
代码来源: www.wpzxbj.com
*/
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() ) {
// once we've found one non-virtual product we know we're done, break out of the loop
$virtual_order = false;
break;
} else {
$virtual_order = true;
}
}
}
}
// virtual order, mark as completed
if ( $virtual_order ) {
return 'completed';
}
}
// non-virtual order, return original status
return $order_status;
代码说明:请将以上代码插入主题fuction.php文件保存即可。以后所有非实物商品下单并完成付款后即可直接变更为已完成订单状态了。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


















