如何使用我的 sql 查询在 woocommerce 中删除已完成的订单

Posted

技术标签:

【中文标题】如何使用我的 sql 查询在 woocommerce 中删除已完成的订单【英文标题】:how to delete completed orders in woocommerce using a my sql query 【发布时间】:2014-09-14 06:41:54 【问题描述】:

我想使用单个 sql 查询删除 woocommerce 中已完成的所有订单。因为,我的WordPress Dashboard 有问题。我无法从后端查看已完成的订单。越来越空白了我有7,823 Completed Orders。我希望这就是我在查看Completed Orders 时看到白页的原因。

有没有办法,我可以使用 mysql 查询删除所有 Completed Orders。所以,我可以在phpMYADMIN 中运行它。

有什么建议。

【问题讨论】:

您是否检查过是否存在 PHP 错误,这就是出现白页的原因?通常原因 关于编程和管理的 WordPress 问题最好在 wordpress.stackexchange.com 上提问 @AndyHolmes 这个网站已经工作了 3 年多了。从昨天开始我们就遇到了这个问题。阿洛斯,我从Live Website 进行了备份并创建了本地站点。当我更改 memory limit 之类的设置时,它工作正常。当我扭转它。同样的问题。 是的,但是你升级了 wordpress 吗?如果你有,那就是为什么。这将是 PHP 错误而不是数据库问题。删除已完成的订单似乎很愚蠢,尤其是如果您将来遇到订单问题 @AndyHolmes 谢谢,我没有更新WordPress or PHP version on my server。你能告诉我如何跟踪这个问题吗? 【参考方案1】:

Woocommerce 订单存储在 post 表、postmeta 表、woocommerce_order_itemswoocommerce_order_itemmeta 表中。订单的各个部分存储在不同的表中。此外,订单状态通过存储订单状态列表的taxonomies 进行管理。 任何正在/将要编写此查询的人都必须至少编写 5-6 个查询或 单个大连接查询。

所以,如果您没有更大的产品设置,我建议您卸载 WooCoommerce。为此,您可以关注this link,这将删除数据

【讨论】:

在你发帖之前我已经这样做了。但是,我将其标记为答案。顺便说一句,不要这样做。这不是一个适当的解决方案。但是,暂时我也这样做了。 :)【参考方案2】:

我的解决方案是删除所有订单(如果您要从有演示数据的商店转移到新网站)。您可以使用以下 SQL 查询来执行此操作。

DELETE FROM wp_woocommerce_order_itemmeta
DELETE FROM wp_woocommerce_order_items
DELETE FROM wp_comments WHERE comment_type = 'order_note'
DELETE FROM wp_postmeta WHERE post_id IN ( SELECT ID FROM wp_posts WHERE post_type = 'shop_order' )
DELETE FROM wp_posts WHERE post_type = 'shop_order'

【讨论】:

【参考方案3】:

要最大限度地使用原生 Woocommerce 功能,您可以按照以下方式进行。 使用 SQL 将所有订单移至回收站:

UPDATE wp_posts SET post_status = 'trash' WHERE post_type = 'shop_order';

然后转到 Woocommerce -> 订单 -> 垃圾箱 并点击 清空垃圾箱

【讨论】:

对我来说似乎是一个很好的解决方案。除了Empty Trash 例程如果有很多订单(在我的情况下为 5000+),仍然容易触发脚本超时。 36,000 个订单并给我 503 服务不可用每 10 分钟仅删除 3000 个订单【参考方案4】:

要删除状态为已完成的订单,您只能使用以下代码。

UPDATE wp_posts 
SET post_status = 'trash' 
WHERE post_type = 'shop_order'
AND post_status = 'wc-completed'

此代码并未完全消除系统或基础 订购数据,将其发送到垃圾箱。


你想永久删除订单吗?,你必须去:

Woocommerce > 订单 > 垃圾箱并点击清空垃圾箱。


如果你想消除其他订单,你应该只知道Woocommerce中存在的不同状态:

    wc-完成 wc-待处理 wc 处理 wc-on-hold wc-取消 wc-退款 wc 失败

您在子句 IN ('status') 中指定它们

UPDATE wp_posts 
SET post_status = 'trash' 
WHERE post_type = 'shop_order'
AND post_status IN ('wc-pending', 'wc-processing', 'wc-on-hold', 'wc-cancelled', 'wc-refunded', 'wc-failed')

【讨论】:

【参考方案5】:

我首先将所有相关订单设置为垃圾箱,从而解决了这个问题:

UPDATE wp_posts SET post_status = 'trash' WHERE post_type = 'shop_order';

如果您在按 Empty Trash 时有太多帖子需要通过,并且出现 PHP 错误,您可以运行以下 SQL 来删除它们:

DELETE FROM wp_posts
WHERE post_type = 'shop_order' 
AND post_status = ‘trash’

【讨论】:

【参考方案6】:

我刚刚在 https://wordpress.org/support/topic/tip-how-to-delete-all-your-orders-and-save-you-time/#post-12290285 的 WP CLI 中使用了这个 sn-p

警告:这会删除所有订单,您必须根据自己的情况进行调整(仅完成),请参阅:https://developer.wordpress.org/cli/commands/post/list/

wp post list --field=ID --post_type=shop_order --posts_per_page=2000 | xargs wp post delete --force

与the official WooCommerce Subscriptions plugin合作,相关订阅也已被删除。

【讨论】:

【参考方案7】:

我在搜索“使用 wp cli 删除 woocommerce 上失败的订单”时发现了这篇文章,但 Google 将我发送到这里。因此,我将为将来可能需要它的人添加我的解决方案!

您可以使用 WP CLI 工具轻松做到这一点:

wp post delete $(wp post list --post_type=shop_order --post_status=wc-completed --format=ids)

如果您想删除并跳过垃圾箱,只需在语句末尾添加--force

如果您想删除不同的订单状态,可以使用以下选项:

wc-完成 wc-待处理 wc 处理 wc-on-hold wc-取消 wc-退款 wc 失败

【讨论】:

以上是关于如何使用我的 sql 查询在 woocommerce 中删除已完成的订单的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce:SQL 查询 - 如何获取当前的 customer_id? (不是用户 ID)

限制删除订单数量 SQL Query

搜索产品woocommerce时查询缓慢

使用 SQL 获取已购买商品的数量 - Woocommerce

如何按ID排序不随机化Woocommerce的相关产品

使用查询批量更改 WooCommerce 产品类别?