前言
在使用一段时间WordPress后,我发现我网站文章才200多编,文章ID确飙升到2000多了,看着这个ID感觉就不自在,到了以后文章越来越多,文章ID岂不得有六七位数了,在网上找了找解决方法,今天记录下来,以后可能还需要用到
文章ID不连续的原因
1、文章的自动保存、修订版本
我们在后台写文章的时候,每写一编文章它都会隔一段时间自动保存,以免文章数据丢失,但是,当它每保存一次文章的时候,它都会自动生成一个文章ID,致使占用了文章ID
当我们在进行文章修改的时候,每修改一次,系统就会自动生成一个修订版本,这个修订版本又会自动生成一个文章ID,所以这里又占用了一个文章ID,致使文章ID数值又增大了,上一编文章的ID可能是100,经过多次文章自动保存、修改后,等你正式发布这编文章的时候,这个文章ID可能就变成120或130或者150了,就算你删除了这些修订版本的文章,那些ID还是被占用了。
2、菜单、附件、页面占用ID
WordPress的附件、导航菜单项和页面都是比较特殊的post,而且都会占用一个post的ID,在wp_posts表的数据表结构里面可以看出post类型种类(详细介绍WordPress数据库表wp_posts),这个无法改变。
文章跳ID的解决办法
我们现在知道了导致wordpress文章ID不连续的原因后,就可以从文章自动保存、修订版本、菜单、附件、页面等方面进行优化设置了
1、禁用文章自动保存
自动保存功能还是有一些好处的,它会每隔一小段时间自动保存你正在编辑的内容,比如当你正在编辑文章时,突然停电了,自动保存功能就会把你之前编辑的内容自动保存在系统里,让你不致于花了半小时辛苦编辑的文章付诸东流,但是,它的缺点就是每自动保存一次它就会自动生成一个文章ID,保存的次数越多,占用的文章ID就越多,这就是导致文章ID不连续的原因之一
禁用这个功能的话,我们就需要在文件路径:wp-admin/post-new.php和wp-admin/post.php这两个文件中注释掉以下这一行:
wp_enqueue_script(‘autosave’);
或者在当前主题的functions.php中添加以下代码:
// 禁用自动保存,所以编辑长文章前请注意手动保存。
add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );
2、禁用和删除文章修订版
在根目录中找到文件wp-config.php添加下面代码:
define(‘WP_POST_REVISIONS’,false);
或者在当前主题functions.php文件中添加下面的代码:
// 禁用修订版本
add_filter( 'wp_revisions_to_keep', 'specs_wp_revisions_to_keep', 10, 2 );
function specs_wp_revisions_to_keep( $num, $post ) {
if ( 'post_type' == $post->post_type )
$num = 0;
return $num;
}
文章修订版禁用之后,其实数据库中之前的修订版文章还是完好无损的保存在数据库中,我们可以把这些修订版文章删除,这些修订版文章其实对我们来说已经用处不大了,而且还占着茅坑,我们现在可以把它删除,
在phpmyadmin 中执行以下SQL语句(修改数据库前请一定要备份数据):
DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision';
3、附件、图片占用文章ID问题
我们在发布文章的过程中上传图片、附件等媒体文件时,这些文件时也是会占用文章id的,这些id都和文章id一起保存在同一数据库表wp_posts里面。
所以如果你特别追求文章的ID一定要完美无缺地连续,请不要在发布文章的时候上传/插入这些媒体,只有从ftp直接上传的文件,才不会占用id。追求id连续的朋友建议上传文件和图片都从ftp直接上传,然后文章编辑的时候直接进行插入这些文件即可。
4、导航菜单项和页面占用id
WordPress的导航菜单也会占用文章ID,但一个网站的导航菜单也就那么几个,占用也就那么几个
WordPress的页面也会占用文章ID,但这个也没办法,除非你不发布页面
最后总结一下:在主题的functions.php文件中加入下面的代码,只要以后只发文章,不发页面,不再新加菜单,不上传附件、图片等内容的话,以后你的文章ID基本是连续的,就算不连续数值也相差不会太大,也不会改变你之前发布的文章ID也不会影响SEO
// 禁用自动保存,所以编辑长文章前请注意手动保存。
add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );
// 禁用修订版本
remove_action( 'pre_post_update' , 'wp_save_post_revision' );
add_filter( 'wp_revisions_to_keep', 'specs_wp_revisions_to_keep', 10, 2 );
function specs_wp_revisions_to_keep( $num, $post ) {
if ( 'post_type' == $post->post_type )
$num = 0;
return $num;
}
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' );
function keep_id_continuous(){
global $wpdb;
// 删掉自动草稿和修订版
$wpdb->query("DELETE FROM `$wpdb->posts` WHERE `post_status` = 'auto-draft' OR `post_type` = 'revision'");
// 自增值小于现有最大ID,MySQL会自动设置正确的自增值
$wpdb->query("ALTER TABLE `$wpdb->posts` AUTO_INCREMENT = 1");
}
暂无评论内容