如何在 WooCommerce 中自动更改订单状态
已发表: 2021-07-31您想更新商店中的订单状态吗? 你来对地方了。 在本指南中,我们将向您展示如何使用一些 PHP 脚本在 WooCommerce 中自动更改订单状态。 如果您没有高级编码技能,请不要担心,我们将详细解释每个脚本。
WooCommerce 为开发人员提供了许多功能,因此如果您具有编码技能,您可以进行各种自定义并改进您的电子商务商店。 在以下教程中,您将了解有关订单状态的所有信息。 这是 WooCommerce 的一项功能,在管理大量订单时非常有用。 它在后端订单列表中特别有用,商店经理可以轻松地搜索并针对具有特定状态的订单采取某些操作。
事不宜迟,让我们直接进入它。
WooCommerce 中的订单状态是什么?
订单状态只是订单的一个标签,代表订单的当前状态。 它类似于附加到帖子的分类法,描述有关该帖子当前状态的特定信息。 例如,当客户点击“下订单”按钮时,他们会在我们的商店下订单。 默认情况下,订单状态设置为“待付款”。
如果商店与 PayPal 或 Stripe 等支付网关集成,则会验证之前的默认状态(待处理),并根据支付网关验证结果更改为“暂停”或“失败”。 然后,如果支付完成,订单状态会自动变为“处理中”,如果支付失败,订单状态会自动变为“失败”。
如您所见,这些状态中的每一个都为我们提供了有关订单的相关信息。 这种自动化让我们知道订单的付款是否已经完成,或者没有将我们的产品交付给客户。
WooCommerce 中的订单状态
这些是 WooCommerce 中可用的所有订单状态以及每个状态的含义:
- 待付款:订单已收到,尚未注册付款。 我们正在等待付款
- 失败:由于某种原因支付失败。 这意味着它被支付平台(即 PayPal)拒绝或需要进一步的身份验证(SCA)
- 处理中:本店已收到货款,商品库存已更新,购买如期发货
- 已完成:订单已完成并完成。 这是一切顺利的订单的最后状态
- On hold : 客户没有付款,所以订单需要店长确认
- 已取消:商店管理员或用户在某个时间点取消了订单。 这不需要任何进一步的操作,但建议联系客户以了解他们取消订单的原因
- 已退款:订单已退款,无需进一步操作
现在我们更好地了解了订单状态及其功能,让我们看看为什么更新它是个好主意。
为什么要更改默认订单状态功能?
每个电子商务商店都是不同的,并且有特定的要求。 一些在线商店可能根本不使用订单状态,或者可能不会全部使用它们。 例如,如果购物者无法退货,商店可能不会使用退款状态。
此外,在某些情况下,默认订单状态功能可能不够用,商店需要自定义状态或自动化解决方案来管理订单状态。 在这些情况下,自定义订单状态行为是改善店铺管理的绝佳解决方案。 这样,电子商务商店就不需要在每种情况下手动更新订单状态。
这将帮助店主节省时间,让他们专注于更重要的事情来改善他们的业务。
WooCommerce 中的订单状态如何变化
此时,重要的是要了解当 WooCommerce 与 PayPal、Payoneer、Stripe 等支付网关集成时,订单状态会动态变化。 请记住,如果您在未预料到的情况下手动更新状态,您可能会破坏商店中提供的付款方式,客户将无法遵循购买流程。
为了更好地理解我们要做什么,让我们看看订单状态流程是如何工作的:
来自 WooCommerce 文档
如上图所示,订单状态的第一阶段是“待处理”。 之后,支付网关会验证用户是否可以完成支付并将其状态更改为“暂停”,然后在支付成功完成后更改为“处理中”。 否则,它会变成“失败”。
在此之后,WooCommerce 不会做任何其他事情。 店长应将订单标记为“已完成”或“已取消”。 此时,即使集成了支付网关,自动(以编程方式)更改订单状态也是安全的。
此外,重要的是要知道,当状态更改为“处理中”或“已退款”时,将重新计算订单中涉及的产品的库存。 与该订单相关的在线商店的所有统计数据也会发生同样的情况。
现在我们对订单状态如何变化有了清晰的认识,让我们看看如何在 WooCommerce 中更新订单状态。
如何在 WooCommerce 中自动更改订单状态
让我们看一些示例脚本,以在 WooCommerce 中以编程方式更改订单状态。
注意:我们将编辑一些核心文件,因此在开始之前,请确保对您的站点进行完整备份。 此外,如果您还没有一个子主题或使用这些插件中的任何一个,那么即使在更新您的主题后您也可以保留您的自定义。
购买后更改所有订单状态
如果您的电子商务商店未与任何使用订单状态的支付网关集成,您可以在客户下订单后立即暂停所有订单,而不是将其保留为“处理中”。 让我们看一下这个脚本:
函数 QuadLayers_change_order_status( $order_id ) { if ( ! $order_id ) {return;} $order = wc_get_order($order_id); if('处理'== $order->get_status()) { $order->update_status('wc-on-hold'); } } add_action('woocommerce_thankyou','QuadLayers_change_order_status');
我们使用woocommerce_thankyou
钩子在下订单后立即触发我们的函数,并使用update_status()
更改状态。
如您所见,状态块有一个前缀 (WC)。 尽管该函数在没有前缀的情况下也可以工作,但建议使用它。
值得注意的是,您可以通过调整代码来使用任何其他状态甚至自定义状态,而不是“等待”。
从订单 ID 修改订单状态
以下脚本将更改单个订单的状态。 例如,要更改订单 115 的订单状态,我们使用以下代码段:
add_action('init',function(){ $order = 新的 WC_Order(115); $order->update_status('wc-processing'); });
这是一个简短的脚本,所以我们在'init'
WordPress 挂钩中使用了一个匿名函数。
请注意,这将不允许您在启用脚本时对状态进行进一步更改。
为回头客更新 WooCommerce 订单状态
这是在 WooCommerce 中自动更改订单状态的另一个有趣示例。 仅当用户的先前订单附加了“已完成”或“处理中”状态时,以下脚本才会将订单状态更改为“已完成”。
函数 QuadLayers_order_status_returning( $order_id ) { // 获取此客户订单 $user_id = wp_get_current_user(); $customer_orders = []; foreach ( wc_get_is_paid_statuses() as $paid_status ) { $customer_orders += wc_get_orders( [ '类型' => 'shop_order', '限制' => - 1, 'customer_id' => $user_id->ID, '状态' => $paid_status, ]); } # 上一个订单存在 如果(计数($customer_orders)>0){ if ( ! $order_id ) {return;} $order = wc_get_order($order_id); if('处理'== $order->get_status()) { $order->update_status('wc-completed'); } } } add_action('woocommerce_thankyou', 'QuadLayers_order_status_returning');
这可能是一个好主意,可以增加一层安全性并改善回头客的购物体验。
更改 URL 参数的订单状态
当 URL 参数出现在浏览器上时,此示例脚本将更改为特定的订单状态。 当我们使用init
WordPress 挂钩时,该脚本将在商店的任何页面上运行。
此外,它将编辑当前登录用户的最新订单的订单状态。 在此示例中,当任何 URL 具有如下“revert”参数时,订单状态将更改为“Cancelled”: https://website.com/shop?st=revert
://website.com/shop?st=revert
add_action('init',function(){ if(isset($_GET['st'])&&!empty($_GET['st']) ): $get_url = $_GET['st']; if($get_url=='revert'): $user_id = wp_get_current_user(); $order = wc_get_customer_last_order($user_id->ID); $order->update_status('wc-cancelled'); 万一; 万一; });
创建自定义订单状态
在此示例中,我们将创建一个可以自由使用的新自定义订单状态,而不是更改订单状态。 如果现有状态还不够,或者您希望创建一个新状态以提高清晰度,这是一个好主意。 创建自定义订单状态后,您可以将其与上述任何脚本一起使用。
以下脚本将注册并向订单状态列表添加新状态。 在这种情况下,我们将新的自定义订单状态称为“进行中”,但您可以通过简单地自定义代码来使用任何您想要的名称。
//注册新状态 函数 register_in_progress_order_status() { register_post_status('wc-in-progress',数组( '标签' => '进行中', '公共' => 真的, 'show_in_admin_status_list' => 真, 'show_in_admin_all_list' => 真, 'exclude_from_search' => 假, 'label_count' => _n_noop('进行中(%s) ', '进行中(%s) ') )); } // 将自定义状态添加到订单状态列表 函数 add_in_progress_to_order_statuses( $order_statuses ) { $new_order_statuses = 数组(); foreach ( $order_statuses as $key => $status ) { $new_order_statuses[ $key ] = $status; if ('wc-processing' === $key) { $new_order_statuses['wc-in-progress'] = '进行中'; } } 返回 $new_order_statuses; } add_action('init', 'register_in_progress_order_status'); add_filter('wc_order_statuses', 'add_in_progress_to_order_statuses');
更改 WooCommerce 订单状态的其他方法
如果您正在寻找更新 WooCommerce 中默认订单状态的替代方法,您可以查看一些插件。 不幸的是,没有很多免费工具,但这些是最好的:
- YITH 自定义订单状态:管理订单状态和创建自定义状态的出色工具。 它是市场上最好的工具之一,但并不便宜。 每年将花费您 79.99 欧元。
- WooCommerce 订单状态管理器:另一个用于添加、删除和编辑订单状态的出色插件。 您还可以根据订单状态触发电子邮件。 每年的费用为 49 美元。
- WooCommerce 的自定义订单状态:在 WooCommerce 中管理订单状态的最佳工具之一。 这是一个高级插件,起价为每年 39 美元。
- Ni WooCommerce 自定义订单状态:少数可靠的免费插件之一,可让您轻松管理订单状态。
如何在您的 WooCommerce 商店中查看订单状态
在您的商店中查看订单状态的最简单方法是打开您的 WooCommerce 仪表板并转到订单。 然后,打开任何订单,然后在“常规”部分下,按“状态”下拉菜单。 在那里,您将看到商店中的所有订单。
结论
总之,订单状态是表示订单当前状态的标签。 尽管 WooCommerce 包含某些默认状态,但对于那些想要删除或添加新状态的人来说,自定义它们可能是一个好主意。 对于需要自动化解决方案来管理订单状态的企业来说,它也是一个有趣的解决方案。
在本指南中,我们已经看到了所有默认订单状态以及在 WooCommerce 中自动更改订单状态的不同示例。 这些只是一些想法,但您可以做的还有很多。 我们建议您以这些脚本为基础并尝试为您的商店自定义它们。
有关如何自定义商店的更多信息,请查看以下教程:
- 如何自动应用 WooCommerce 优惠券
- 以编程方式编辑 WooCommerce 感谢页面
- 如何自定义 WooCommerce 注册表单
- 3 种测试 WooCommerce 订单的方法
- 如何添加 WooCommerce AJAX 产品过滤器
您是否更新了商店中的订单状态? 您按照本指南有任何问题吗? 在下面的评论中让我们知道!