如何使用我的 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_items
和 woocommerce_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)