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自动完成订单的方法了,希望对你有所帮助。

Scroll to Top