php 文章id连续,wordpress文章ID连续终极技巧

wordpress的ID连续问题让很多强迫症患者头疼不已,本人也是其中一个。大家都知道,wordpress的修订版本、自动保存、以及上传图片都会占用文章ID,图片占用id我没话说,但是wordpress的修订版本、自动保存也占用ID就实在心里不舒服(wordpress的修订版本及自动保存个人认为除了占用数据库外,没什么好处的)。以前都是采用修改 WordPress 原文件的方法屏蔽自建 auto-draft 记录,但是似乎目前没有适合 3.6 之后版本的办法,而且每次升级都需要修改原文件,既麻烦又不安全。

下面实现wordpress文章ID连续的方法来自网上,经本人测试有效,特分享给大家。

只要将下面的代码插入到主题functions.php中就可以了,支持 WordPress 3.0~3.6 的任何版本,而且未来升级也不会影响功能。

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’ );

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

此段代码经过本人测试,没有发现问题,不过由于代码涉及到DELETE这条极其危险的 MySQL 语句,所以是否使用还请各位自己想清楚。

资料来源:http://xiaoxia.de/keep-wordpress-post-id-continuous/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值