在WordPress中我们经常遇到一个问题就是,我们在批量移动统一分类下的文章时,文章并不会显示原有分类,导致移动分类后,原分类无法取消,这样被移动的文章就包含两个分类,显然不是我们想要的结果。
如果我们是想将某一分类下的所有文章都移动到其他分类,相信WordPress插件中心的Bulk Move插件可以帮你。
因为它几乎能帮你精准完成大部分的转移工作,包括转移后删除原标签、原分类,是不是很方便呢?
但是我们今天需要讲的是,如何通过文章标题来转移文章到新分类。
比如我要将标题中包含“在这里每天60秒读懂世界”的文章批量移动到“每天60秒读懂世界”分类下面,这里我们使用Bulk Move当然是无法完成的,事实上使用sql代码即可完成任务:
(请注意,执行 SQL 语句前请备份数据库,以免操作不当导致数据丢失。)
UPDATE wp_term_relationships SET term_taxonomy_id = (SELECT term_id FROM wp_terms WHERE name = '每天60秒读懂世界') WHERE object_id IN ( SELECT ID FROM wp_posts WHERE post_title LIKE '%在这里每天60秒读懂世界%' )
这个 SQL 语句会将标题中包含“在这里每天60秒读懂世界”的文章移动到“每天60秒读懂世界”分类下面。其中,wp_term_relationships 表存储了文章和分类之间的关系,wp_terms 表存储了分类的信息,wp_posts 表存储了文章的信息。
转移完成后,会发现文章分类处的数据并没有被更新,但是文章已经转移到新的分类了,这里是因为 WordPress 中的文章计数缓存有问题,我们需要使用sql进行手动更新分类文章的数据统计工作:
(请注意,执行 SQL 语句前请备份数据库,以免操作不当导致数据丢失。)
UPDATE wp_term_taxonomy SET count = (
SELECT COUNT(*) FROM wp_term_relationships WHERE term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
);
执行后会重新计算每个分类下的文章数量,并更新到数据库中。
接下来我们的任务就完成了,是不是很简单呢?