VPS主机与服务器★ 4.8 推荐评级

WooCommerce自动完成订单实现自动发货的方法

博主头像站长评测
发布于 2020/02/08(修订于 2020/02/07)原创独立站体系
WooCommerce自动完成订单实现自动发货的方法

昨天一位朋友咨询笔者,他用WooCommerce自动发送卡密功能失败,付款后显示的状态是待处理,需要管理员手动在后台点发送,系统才会给客户发送邮件告知序列号。

其实导致这个问题的原因很简单,就是WooCommerce的工作流程设计是,当用户付款后,默认状态为正在处理,只有管理员处理后才会完成(因为涉及到发货什么的情况)。

不过不用担心,笔者这里给大家分享两个有效的实现自动完成订单的方法。

方法一:使用插件

我们借助Autocomplete WooCommerce Orders这个插件来实现自动完成订单。

1、后台搜索Autocomplete WooCommerce Orders或者点击下方链接下载后安装插件。

下载地址

2、激活插件,进入WooCommerce设置界面。

3、在Autocomplete Orders处设置保存即可。

https://wordpress.org/plugins/autocomplete-woocommerce-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自动完成订单的方法了,希望对你有所帮助。