Wordpress 删除许多未使用的类别

问题描述 投票:0回答:3

我最近重新设计了一个网站并迁移到另一个域。新网站使用Wordpress作为整个网站的CMS(它只管理上一个网站的博客)。不知何故,在建立新网站的过程中,设计师添加了一大堆类别,确切地说是 953 个类别,其中大多数附加的帖子数为零,并且永远不会被使用。

我想清除这些零类别,但使用 WP 界面要花很长时间才能做到这一点,它一次只能显示 20 个。有什么方法可以通过 MySQL 操作来做到这一点吗?我不愿意从类别表中删除它们,因为我不知道它们如何链接到数据库中的其他位置。 OTOH 也许如果该类别的帖子数为零也没关系?

我知道有一些 WP 方法可以安全地执行此操作,因为当您删除类别时,仪表板上的类别页面必须调用它,但我无法通过查看表单来弄清楚它是什么。

wordpress categories
3个回答
3
投票

对我有用的是:

DELETE FROM `wp_term_taxonomy` WHERE taxonomy = 'category' AND term_taxonomy_id NOT IN (SELECT term_taxonomy_id FROM `wp_term_relationships`);

DELETE FROM `wp_terms` WHERE term_id NOT IN (SELECT term_id FROM `wp_term_taxonomy`);

注意 1:事先备份数据库可能是个好主意。

注意2:这也会删除非空子类别的空父类别。如果您遇到这种情况,您必须随后更新

parent
表中的
wp_term_taxonomy
列。


2
投票

如果单击控制面板顶部的“屏幕选项”按钮,您可以选择在 WP 界面中显示多少个类别,然后使用复选框进行批量删除。


0
投票

我修改了多米尼克的答案,仅删除空的儿童类别:

DELETE FROM `wp_term_taxonomy` WHERE taxonomy = 'category' AND term_taxonomy_id NOT IN (SELECT term_taxonomy_id FROM `wp_term_relationships`) AND parent <> 0;
DELETE FROM `wp_terms` WHERE term_id NOT IN (SELECT term_id FROM `wp_term_taxonomy`);
© www.soinside.com 2019 - 2024. All rights reserved.