首页 » 建站技术 » WordPress » 浏览内容

WordPress文章ID连续之终极方法


2013-04-05 01:07:08 1,989 0 发表评论 字体: 作者:C.K.
标签: WordPress

体验版 88 元,个人版 128 元,多用户版 288元个人版160元升级到多用户版。

  即使禁用自动保存和修订版本,新建文章时也会产生无用的auto-draft记录。之前网上的办法都是采用修改WordPress原文件的方法屏蔽自建auto-draft记录,但是似乎目前没有适合3.5之后版本的办法,而且每次升级都需要修改原文件,既麻烦又不安全。

  其实直接操作数据库更简单,原理为:如果新建文章或上传图片就获取数据库中最后一条有用记录(状态为publish、draft或private的文章或状态为inherit且类型为attachment的行)的ID,并把之后的无用行(状态为auto-draft的文章,状态为inherit且类型为rivision的文章)删除掉,再重设自增。这样无论如何新建文章,数据库中最多有且仅有一条auto-draft记录(WordPress刚刚创建的行,保存之后状态变为publish、draft或private),这样文章ID就能连续了。

function keep_id_continuous(){
  •     global $wpdb;
  •     $lastID = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_status = 'publish' OR post_status = 'draft' OR post_status = 'private' OR ( post_status = 'inherit' AND post_type = 'attachment' )ORDER BY ID DESC LIMIT 1");
  •     $wpdb->query("DELETE FROM $wpdb->posts WHERE ( post_status = 'auto-draft' OR ( post_status = 'inherit' AND post_type = 'rivision' ) ) AND ID > $lastID");
  •     $lastID++;
  •     $wpdb->query("ALTER TABLE $wpdb->posts AUTO_INCREMENT = $lastID");
  • }
  • //将函数钩在新建文章、上传媒体和自定义菜单之前。
  • add_filter( 'load-post-new.php', 'keep_id_continuous' );
  • add_filter( 'load-media-new.php', 'keep_id_continuous' );
  • add_filter( 'load-nav-menus.php', 'keep_id_continuous' );
  • //禁用自动保存,所以编辑长文章前请注意手动保存。
  • add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );
  • //禁用修订版本
  • remove_action( 'pre_post_update' , 'wp_save_post_revision' );
  •   只要将上面的代码插入到主题functions.php中就可以了,支持WordPress 3.0-3.5.1的任何版本,而且未来升级也不会影响功能,基本算是一劳永逸。以上的代码考虑了使用媒体库和自定义菜单的可能,如果需要文章ID完全连续,就不要使用WordPress内置的媒体库功能和自定义菜单功能。

      如果已经存在许多无用记录导致文章不连续怎么办?

      1、使用 wp cleaner 插件,删除无用记录。
      2、使用 露兜的重排文章程序,特别注意:如果固定链接含有文章ID且比较在意收录就不要动老文章的ID了。

      网站统计 Statistics

      • 创建时间: 2005年1月3日 距今4947 天
      • 日志总数: 2461
      • 评论总数: 630
      • 标签总数: 654
      • 链接总数: 273
      • 最后更新: 2017-7-1 18:16:33
      • 您是本站第 13718442 位访客

      广告区 Guǎng Gào