如何批量删除WordPress特定分类或指定日期前的所有文章?
批量删除WordPress特定分类/指定范围文章的解决方案
MySQL语句(无需额外工具,直接在数据库管理工具执行)
重要提示:执行任何删除语句前务必先备份数据库,避免不可逆的数据丢失;如果你的WordPress表前缀不是默认的
wp_,需要把语句里的wp_替换成自己的表前缀。
删除特定分类下的所有文章
DELETE p, tr FROM wp_posts p JOIN wp_term_relationships tr ON p.ID = tr.object_id JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.term_id = YOUR_CATEGORY_ID -- 替换为目标分类ID AND p.post_type = 'post' AND p.post_status IN ('publish', 'draft', 'pending', 'private');
这条语句会同时删除指定分类下的文章,以及文章和分类的关联关系数据,避免数据库残留无效数据。
删除指定日期之前的所有文章
DELETE p FROM wp_posts p WHERE p.post_type = 'post' AND p.post_status IN ('publish', 'draft', 'pending', 'private') AND p.post_date < 'YOUR_DATE'; -- 替换为要保留的最老文章日期,格式如 '2020-01-01 00:00:00'
删除指定ID之前的所有文章
DELETE p FROM wp_posts p WHERE p.post_type = 'post' AND p.post_status IN ('publish', 'draft', 'pending', 'private') AND p.ID < YOUR_MIN_ID; -- 替换为要保留的最小文章ID(删除所有ID小于此值的文章)
如果需要同时清理关联的评论数据,可以加入JOIN wp_comments c ON p.ID = c.comment_post_ID,把DELETE p改成DELETE p, c即可。
WP-CLI命令(需安装WP-CLI)
适合服务器支持WP-CLI的场景,大数量删除建议加--batch参数分批次执行,避免超时。
删除特定分类下的所有文章
# 替换YOUR_CATEGORY_ID为目标分类ID,--batch=100表示每次删除100篇 wp post delete $(wp post list --category=YOUR_CATEGORY_ID --post_type=post --post_status='publish,draft,pending,private' --format=ids) --force --batch=100
--force参数会直接删除文章,跳过回收站;如果不需要跳过,去掉这个参数即可。
删除指定日期之前的所有文章
# 替换YOUR_DATE为要保留的最老文章日期,格式如 '2020-01-01' wp post delete $(wp post list --post_type=post --post_status='publish,draft,pending,private' --date-before=YOUR_DATE --format=ids) --force --batch=100
删除指定ID之前的所有文章
# 替换YOUR_MIN_ID为要保留的最小文章ID wp post delete $(wp post list --post_type=post --post_status='publish,draft,pending,private' --exclude=YOUR_MIN_ID.. --format=ids) --force --batch=100
内容的提问来源于stack exchange,提问作者BigTechCensorVictim
相关产品推荐
相关产品推荐

