wordpress 默认带有文章自动保存和修订版本功能。
自动保存可以防止浏览器崩溃、网络中断或者误操作造成内容丢失;修订版本则会在文章更新时保存历史版本,方便以后恢复。
这两个功能都很实用,但对于内容更新频繁的网站来说,过多的文章修订版本可能增加数据库中的无用数据。部分站长也不希望 WordPress 频繁向服务器发送自动保存请求,因此会考虑关闭自动保存或者限制修订版本数量。
不过,自动保存和修订版本并不是同一个功能,设置方法也不一样。
WordPress自动保存和修订版本有什么区别?
WordPress 自动保存主要用于保护正在编辑但还没有手动保存的内容。默认情况下,WordPress 大约每60秒执行一次自动保存。
修订版本则是在文章或页面更新后,保存之前的内容版本。每次修改文章并点击“更新”,都可能产生新的修订记录。
需要说明的是,自动保存一般不会每60秒就在数据库中新增一条记录。对于同一篇文章,WordPress 通常只为每位编辑用户保留一份自动保存记录,新的自动保存会覆盖旧记录。
真正容易长期积累的,主要是文章修订版本。
推荐方法:通过wp-config.php统一设置
相比把代码添加到主题的 functions.php,更推荐直接修改网站根目录中的 wp-config.php 文件。
这种方法不会受到主题切换的影响,也不容易因为更新主题而丢失设置。
修改前,建议先备份 wp-config.php 文件,避免因为代码位置或符号错误导致网站无法访问。
打开 wp-config.php,找到下面这行注释:
/* That's all, stop editing! Happy publishing. */
将相关配置添加到这行代码的前面。
不同语言版本中的注释可能不完全一样,只要确保代码添加在加载 wp-settings.php 之前即可。
一、修改WordPress自动保存时间
目前 WordPress 没有提供用于完全关闭自动保存的官方配置项,但可以通过 AUTOSAVE_INTERVAL 修改自动保存间隔。
例如,将自动保存时间修改为5分钟:
define( 'AUTOSAVE_INTERVAL', 300 );
这里的单位是秒:
300代表5分钟;600代表10分钟;1800代表30分钟;3600代表1小时。
WordPress 默认自动保存间隔约为60秒。如果只是想减少服务器请求,将时间改成300秒或600秒通常已经足够。
如果设置成86400秒,相当于24小时自动保存一次:
define( 'AUTOSAVE_INTERVAL', 86400 );
这种设置可以达到接近关闭定时自动保存的效果,但并不代表彻底禁用了自动保存。新建文章时产生的 auto-draft,以及区块编辑器的部分保护机制,仍然可能运行。
WordPress 官方也只提供了修改自动保存间隔的方法,并没有提供类似下面这样的关闭选项:
define( 'AUTOSAVE_INTERVAL', false );
因此,不要使用 false,这里应该填写以秒为单位的整数。
二、关闭WordPress文章修订版本
如果确定不需要恢复文章的历史版本,可以在 wp-config.php 中加入以下代码:
define( 'WP_POST_REVISIONS', false );
这会关闭WordPress后续生成的文章修订版本。
需要注意,这项设置不会删除数据库中已经存在的修订版本,只会阻止以后继续生成新的修订记录。
三、限制文章修订版本数量
相比完全关闭修订版本,更推荐限制每篇文章保留的版本数量。
例如,每篇文章最多保留3个修订版本:
define( 'WP_POST_REVISIONS', 3 );
如果只想保留5个版本,可以修改为:
define( 'WP_POST_REVISIONS', 5 );
WP_POST_REVISIONS只能定义一次,不能同时设置为false和具体数字。
普通个人网站可以保留3至5个修订版本。这样既能减少数据库中的历史数据,又可以在文章改错时恢复之前的内容。
WordPress 官方同时支持关闭修订版本或设置最大保留数量。
四、通过functions.php关闭修订版本
如果没有权限修改 wp-config.php,也可以通过代码关闭修订版本。
建议将代码添加到子主题的 functions.php,或者使用自定义代码管理插件。不要直接修改父主题文件,否则主题更新后代码可能被覆盖。
添加以下代码:
function jaaai_disable_post_revisions( $num, $post ) {
return 0;
}
add_filter( 'wp_revisions_to_keep', 'jaaai_disable_post_revisions', 10, 2 );
wp_revisions_to_keep过滤器用于控制每篇文章保留多少个修订版本。返回0,表示不再保留新的文章修订版本。
这个过滤器会覆盖 WP_POST_REVISIONS 的设置,因此一般选择一种方法即可,不建议重复配置。
五、旧版关闭自动保存代码为什么不推荐?
网上经常可以看到下面这段代码:
function disableAutoSave() {
wp_deregister_script( 'autosave' );
}
add_action( 'wp_print_scripts', 'disableAutoSave' );
这段代码通过注销名为autosave的脚本,尝试关闭文章自动保存。
它主要适用于旧版WordPress或经典编辑器。当前WordPress区块编辑器还会通过编辑器组件和REST API处理自动保存,因此仅仅注销这个脚本,不能保证自动保存被完全关闭。
如果网站仍然使用经典编辑器,可以改成更规范的写法:
function jaaai_disable_classic_editor_autosave( $hook_suffix ) {
if ( ! in_array( $hook_suffix, array( 'post.php', 'post-new.php' ), true ) ) {
return;
}
wp_dequeue_script( 'autosave' );
wp_deregister_script( 'autosave' );
}
add_action( 'admin_enqueue_scripts', 'jaaai_disable_classic_editor_autosave', 100 );
这段代码只在文章编辑页面执行,但仍然主要针对经典编辑器,不建议把它当成当前区块编辑器的通用解决方案。
六、已经生成的文章修订版本会被删除吗?
不会。
无论使用WP_POST_REVISIONS还是wp_revisions_to_keep,都只能影响以后生成的修订版本,不能自动清理数据库中已经存在的历史记录。
如果需要清理旧修订版本,可以使用经过验证的数据库清理插件。操作前一定要备份数据库,避免误删文章或其他重要数据。
推荐设置方案
对于大多数WordPress网站,建议使用下面的配置:
define( 'AUTOSAVE_INTERVAL', 300 );
define( 'WP_POST_REVISIONS', 3 );
这套设置会将自动保存间隔调整为5分钟,并将每篇文章的修订版本限制为3个。
如果确定完全不需要文章历史版本,可以使用:
define( 'AUTOSAVE_INTERVAL', 300 );
define( 'WP_POST_REVISIONS', false );
不建议彻底关闭自动保存。自动保存占用的数据库空间通常没有想象中那么大,却可以在断网、浏览器崩溃或者后台异常时帮助恢复文章内容。
对于多数网站来说,延长自动保存时间并限制修订版本数量,通常比彻底关闭这两个功能更加安全。