WordPress禁用文章自动保存和修订功能,让文章ID连续!

2021年2月12日20:00:00 发表评论

WordPress的使用者可以发现,最大的文章ID要远大于文章总量,比如我的博客才342篇左右的文章,而ID已经超过446了,对于金哥这种强迫症患者,这绝对无法忍受,造成ID不连续或者过大倍数于总文章量的原因如下:

  1. 文章的自动保存,使用WordPress的默认编辑器,在编辑过程中,每隔一段时间就会保存一次,以防止数据丢失;
  2. 文章的修订版本,每当你修改文章时都会产生修订版本,而且是每修改一次就产生一个,即使删除修订版本,原占用的ID也无法回收了;
  3. 附件占用ID,WordPress的图片附件实际是一种特殊的post,在数据表结构看出wp_posts表里,图片attachment类型和post类型共享ID号的,你嵌入多少图片就占用多少ID,这个无法改变。
  4. 除了上述的这些可能造成文章ID不连续的功能外,WordPress还会在添加导航菜单、添加页面、新建分类等情况下占用ID,造成文章ID不连续。这种占用没有太好的方法进行解决。

WordPress禁用文章自动保存和修订功能,让文章ID连续!

本博客所使用的图片/附件基本上都是通过 FTP 直接上传到后台指定文件夹,而不是通过wordpress后台上传到网站空间里,所以这个不是引起文章ID不连续的最大原因。产生WordPress文章ID不连续问题的就应该是编辑文章时自动保存和经常修改文章引起的。

原因找到了,下面就说说应对WordPress文章ID不连续的问题的方法。

网上关于禁用文章修订与自动保存功能的实现方式很多,但真说起来也是大同小异,我自己查阅了些 WordPress 的官方文档并结合网上自认为不错的代码整理了一下,大致如下:

方法一、修改 WordPress 配置文件 wp-config.php

打开 WordPress 根目录下的 wp-config.php 文件,在 define('WP_DEBUG', false); 之后添加以下代码:

 
  1. //自动保存10小时一次
  2. define('AUTOSAVE_INTERVAL', 36000);
  3. //禁用修订版本
  4. define('WP_POST_REVISIONS',false);

其中 10 小时可以自行修改,一般编辑一篇文章应该不会用到 10 个小时,比如平时金哥都是用 word 写好文章后再粘贴到 WordPress 后台来发布文章,所以我只需要设置 1 个小时保存一次就够了,因为我一般发布一篇文章绝不会超过 1 个小时。

PS:据说直接取消自动保存功能好像不太起作用,所以建议直接修改自动保存时间比较好。

通过上述代码我们直接将文章修改与自动保存功能禁用掉了,对于一些其他朋友可能仍希望保留最近几个版本的修订记录以免由于误操作导致文章不可恢复,这样的话我们直接将 false 修改为具体的正整数即可,比如下面这样:

 
  1. /** 保留最新 5 次的修订记录 */
  2. define('WP_POST_REVISIONS', 5);
  3. /** 每隔 360s 自动保存一次 */
  4. define('AUTOSAVE_INTERVAL', 360);

我自己使用的就是这种方法,具体代码如下:

 
  1. //自动保存10小时一次
  2. define('AUTOSAVE_INTERVAL', 36000);
  3. //禁用修订版本
  4. define('WP_POST_REVISIONS',false);

方法二、修改自用主题下函数文件 functions.php

一般情况下我们直接修改 wp-config.php 即可实现禁用文章修订与自动保存功能了,但是对于一些主题中如果希望增加一个自定义启用或禁用文章修订选项的话,我们可以尝试修改主题的 functions.php 文件并在主题选项里配置上对应的选项。关于如何在主题的 functions.php 文件中增加此功能,可以参考如下代码:

 
  1. /** 禁用自动保存 */
  2. add_action('wp_print_scripts', 'qgg_not_autosave');
  3. function qgg_not_autosave() {
  4.     wp_deregister_script('autosave');
  5. }
  6. /** 禁用文章修订 */
  7. add_filter( 'wp_revisions_to_keep', 'qgg_wp_revisions_to_keep', 10, 2 );
  8. function qgg_wp_revisions_to_keep( $num$post ) {
  9.     return 0;
  10. }

同样的,如果你想设置文章修订版本的保留数,可以使用如下代码:

 
  1. //设置指定文章类型( my_custom_post )保留最近 5 次的修订版本
  2. add_filter( 'wp_revisions_to_keep', 'qgg_wp_revisions_to_keep', 10, 2 );
  3. function qgg_wp_revisions_to_keep( $num$post ) {
  4.     if ( 'my_custom_post' == $post->post_type ) {
  5.         $num = 5;
  6.     }
  7.     return $num;
  8. }

关于该函数的相关文件,大家可以简单查看下程序 wp-includes 文件夹下的 revision.php 文件以及 wp-includes/js 文件夹下的 autosave.js 文件。

重新排列顺序

在当前主题的functions.php中加入以下PHP代码:

  1. // WordPress 3.8测试有效   
  2. function keep_id_continuous(){     
  3. global $wpdb;     
  4. // 删掉自动草稿和修订版     
  5. $wpdb->query("DELETE FROM `$wpdb->posts` WHERE `post_status` = 'auto-draft' OR `post_type` = 'revision'");     
  6. // 自增值小于现有最大ID,MySQL会自动设置正确的自增值     
  7. $wpdb->query("ALTER TABLE `$wpdb->posts` AUTO_INCREMENT = 1");  
  8.    }   
  9.  add_filter( 'load-post-new.php', 'keep_id_continuous' );  
  10.  add_filter( 'load-media-new.php', 'keep_id_continuous' );  
  11.  add_filter( 'load-nav-menus.php', 'keep_id_continuous' );  

单纯发文章,不发页面,不添加菜单,不上传媒体的话,基本上此后的文章ID是连续的,而且不改变之前已经发布的文章ID。

总结

过多的文章修订记录对于数据库的优化来说似乎也不是一件好事,所以说最终决定禁用文章修订与自动保存功能,虽然并不能彻底解决问题,但多少会有所缓解。最后,建议配合WP clean UP插件清理数据库,效果更佳。

Tips:

做副业长期赚不到钱的话很容易放弃,特别是对于新手来说,新手刚入行的时候期望值都比较高,以为进来就马上能赚到钱,但是现实却很残酷,很多新手都没能坚持到赚钱的时候。因此,我在朋友圈《加微信》会给大家推荐一些破零项目,钱虽然不多,但是我觉得能让很多新手做副业的信心不那么容易被打垮。

掘金网
  • 版权声明:本站原创文章,转载请保留出处和链接!
  • 本文链接:http://jjsoho.com/wzidlj/ 网赚有风险,投资需谨慎!