解决关于wordpress的ID连续问题

2013年11月2日 分类: Wordpress (95 个脚步)

一开始建站的时候还不太注意到id的问题,等注意到的时候,id已经是到了100多了。

然后现在每次都是在纠结升级的问题,是升级呢还是不升级呢。

升级因为修改过代码,改起来好麻烦,而且还要对比下我改过什么东西。

现在找到了一个相对来说比较好的方法来解决这个问题

这个方法就是利用系统的钩子来实现。

在主题的模板函数function.php中加入以下内容

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 = 'revision' ) ) 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' );

首先在进入新建文章、上传媒体文件和自定义菜单的前面执行keep_id_continuous 这个函数,按照降序查询当前非自动草稿、修订版本的id,然后删除自动草稿、修订版本,将自增id改为刚得到的id+1

保存后看看效果,进入新建文章,果然只有一个自动草稿,再进来也是只有一个自动草稿。

然后进入外观–菜单 中,发现刚加的自动草稿已经被删除了,证明我们修改成功了。

现在我可以安心的升级了,不再受到wordpress 升级所带来的麻烦了。~~

解决关于wordpress的ID连续问题 【声明】本文 解决关于wordpress的ID连续问题 为柠之漠然原创文章,转载请注明出自 枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2013/11/solve-the-id-not-continuous-on-the-wordpress/ , 转载请保留本声明!

标签: , , ,
12 条评论
  • 如果能加上原始出处会更好

    • wordpress的东西改的太多,都不知道原出处是那里了

  • 难道这是一个妹子的博客?

    • 这年头还有那个妹子会玩这个的

  • 如果用Windows Live Writer发布博客的话,是否应该也在chass.ixr.php中添加钩子,形如:
    add_filter( ‘chass.ixr.php’, ‘keep_id_continuous’ );

  • 应该是
    add_filter( ‘post-new.php’, ‘keep_id_continuous’ );
    add_filter( ‘media-new.php’, ‘keep_id_continuous’ );
    add_filter( ‘n***-menus.php’, ‘keep_id_continuous’ );

    • 是没有这个文件,但是这个是一个系统钩子 有时候不能说看见有.php后缀的就一定要有文件

      这个钩子的具体代码是在admin.php中大概是216行左右
      if ( $typenow == ‘page’ ) {
      if ( $pagenow == ‘post-new.php’ )
      do_action( ‘load-page-new.php’ );
      elseif ( $pagenow == ‘post.php’ )
      do_action( ‘load-page.php’ );
      } elseif ( $pagenow == ‘edit-tags.php’ ) {
      if ( $taxnow == ‘category’ )
      do_action( ‘load-categories.php’ );
      elseif ( $taxnow == ‘link_category’ )
      do_action( ‘load-edit-link-categories.php’ );
      }

      • 但是,我测试为什么无效呢~

        • 你把post-new.php 改回来啊。。

          • 我就是说有load-post-new.php的时候

            • 我看的时候没有 编辑后 点击发帖 然后再看看数据库 最后一个除了public看看还有没有其他的

  • load-post-new.php在什么地方?我没找到

你必须要启用 Javascript