为什么要清理过期草稿?
我之前帮一个做五金配件的客户整理他们的WordPress网站,发现后台积累了上千条过期草稿,页面加载慢得让人抓狂。其实,过期草稿不但占用数据库空间,还会拖慢后台响应速度。那怎么快速清理这些草稿,省力又安全呢?

什么是“过期草稿”?
简单来说,WordPress中的“草稿”状态是指未发布的文章。很多情况下,作者写着写着就放弃了,这些草稿就一直存在数据库里。这里的“过期草稿”,我定义为“30天前未更新的草稿”,你也可以根据实际需求调整时间。
如何用PHP代码快速删除过期草稿?
我习惯直接在主题的 functions.php 文件或者通过自定义插件运行这段代码,操作简单又安全。代码如下:
<?php
function delete_expired_drafts( $days = 30 ) {
global $wpdb;
// 计算时间戳,获取30天前的日期
$date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );
// 查询符合条件的草稿ID
$draft_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_modified < %s",
$date_threshold
) );
if ( empty( $draft_ids ) ) {
return 0; // 无需删除
}
foreach ( $draft_ids as $id ) {
wp_delete_post( $id, true ); // true 表示永久删除,不进入回收站
}
return count( $draft_ids );
}
// 调用示例,删除30天前未修改的草稿
$deleted_count = delete_expired_drafts(30);
echo "共删除了 {$deleted_count} 条过期草稿。";
?>
参数说明:
- $days:判断过期的天数,默认30天,可以自行调整。
- post_status = ‘draft’:只针对草稿状态的文章。
- post_modified < $date_threshold:只删除最后修改时间早于指定天数的草稿。
- wp_delete_post():WordPress自带的删除函数,第二个参数为true时直接永久删除。
有没有更简单的方式?
如果你不想写代码,也可以借助数据库管理工具(如phpMyAdmin)执行下面的SQL语句:
DELETE FROM wp_posts
WHERE post_status = 'draft'
AND post_modified < DATE_SUB(NOW(), INTERVAL 30 DAY);
注意:执行前一定要备份数据库,避免误删数据。
实际效果如何?
我最近帮一个电商客户做SEO优化时,后台草稿数从1200条减少到不足50条,后台加载速度提升了30%以上。老板都说操作简单又见效,心情都好了。
总结一下
后台过期草稿清理不难,用点小代码就能快速搞定。记得先备份,再操作。调整天数参数,灵活适配你的站点需求。