如何快速批量删除Wordpress某分类15W文章

有这个需求的人可能不多,我从网上搜索也确实没发现有批量删除文章的。我应该是不多的几个。

原因是这样的,我的另一个网站有15万多条文章都是垃圾,就是采集来的,搜索引擎收录也不好,观看体验也不好,进入后台看着碍眼,于是我想把这个分类下的文章15万文章都删除。

进入Wordpress后台,打开所有文章,选择要删除的分类,勾选全选,1次20条,全部删除,删除速度肉眼可见的慢,而且还只是去了回收站,还要去回收站再删除一次。 1次20条,这要删到哪年哪月呀。

设置每页显示100条,批量删除,速度更慢了。

设置每页显示500条,批量删除,nginx报502错误了🙄!

看来这个办法不行,必须进数据库了。

Wordpress里存放文章的表叫:WP_POSTS,但仔细分析发现,这个表不但有文章数据,还有附件、单页文章什么的,都在里面,而且也找不到哪个是分类字段。

经过研究发现,Wordpress对文章、附件、单页都进行了统一处理,要想查询某分类的文件,必须借助另外的两个表:wp_term_relationships(存储term之间的关系)和wp_term_taxonomy(存储分类)

于是就有了下面的SQL语句:

select a.id 
from 
wp_posts as a inner join wp_term_relationships as b on a.ID=b.object_id
inner join wp_term_taxonomy as c on b.term_taxonomy_id=c.term_taxonomy_id 
where c.taxonomy='category' and c.term_id=1856;

上面的语句可以查询某个分类(分类ID:1856)的所有文章。

顺理成章的,就有了删除语句

delete a 
from wp_posts as a inner join wp_term_relationships as b on a.ID=b.object_id inner
join wp_term_taxonomy as c on b.term_taxonomy_id=c.term_taxonomy_id 
where c.taxonomy='category' and c.term_id=1856;

如果你也需要删除某分类的内容,复制delete这句到SQL工具里,把分类ID:1856换成你的分类执行,啪的一下,很快啊,就完成了。15万条数据没有了。

BUT,这么做其实是有风险的,因为wordpress还有相关的postmate数据没有删除,不过还好有数据库清理插件,可以快速清理没用的postmate数据,插件随便选一个就行了。

好了,现在网站后台执行快了很多。