细心的人可以发现,本站从第一篇文章直到现在,id号都是连续的,看着一点都不臃肿,你博客的id不连续是由多个原因呢造成的。
WordPress编辑文章时,会产生大量的修订版本和草稿,你会发现,没几篇文章,就几十,几百开外了,非常让人不舒服,这个功能虽然很方便,但都占据ID号,而且让数据库变的臃肿。精心编辑了这篇wordpress教程,教你实现文章id连续性。
第一步、修改数据库
即使新建的wordpress在发第一篇文章时,编号也是3,这是因为一篇文章和一个页面占用了两个ID,就算删除了页面,那么也是从3开始排。
登录phpmyadmin修改修改mysql数据库中的posts表,自带的页面占的ID2,不需要删除,guid改成http://xxside.com/?p=2。
将页面的格式post_type类型改成post,之后发布文章都是连号了。
第二步:修改代码
1、在主题里的functions.php里的<?php下边添加下边代码,禁止生成修订和草稿。
// 禁用自动保存,所以编辑长文章前请注意手动保存。
add_action( ‘admin_print_scripts’, create_function( ‘$a’, “wp_deregister_script(‘autosave’);” ) );
// 禁用修订版本
add_filter( ‘wp_revisions_to_keep’, ‘specs_wp_revisions_to_keep’, 10, 2 );
function specs_wp_revisions_to_keep( $num, $post ) {
return 0;
}
2、这段代码也是禁止修订和稿件,加上这段就是双保险了,避免主题升级、wordpress版本升级时,有可能导致之前添加的代码消失,在网站根目录配置文件wp-config.php中的define(‘WP_DEBUG’, false);下边添加。
define( ‘AUTOSAVE_INTERVAL’, false );
define(‘WP_POST_REVISIONS’, false);
3、调用之前占用的ID
禁用修订和稿件后,id的连续性变的紧密了,但并不是挨着的,这是因为保存草稿和更新,以及预览时还是会占用Iid,只是不保存了而已。所以在发布文章时,我们必须调用这些浪费的id,在主题里的functions.php里的<?php下边添加下边代码可以实现调用之前没用过的id。
// WordPress连续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 = ‘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’ );
// WordPress连续ID,禁用草稿功能函数结束
// 使WordPress在原生编辑器(tiny)下发表文章时,不去除空格
add_filter(‘tiny_mce_before_init’, ‘preserve_nbsp_chars’);
function preserve_nbsp_chars($initArray) {
$initArray[‘entities’] = ‘160,nbsp,’.$initArray[‘entities’];
return $initArray;
}
4、禁止添加多媒体、附件、页面、自定义菜单。
这一步,很多博主接受不了,然而添加的这些都会占用ID,所以在编辑文章时,图片等文件内容使用媒体的外链插入,如此一来有个缺点,媒体库中不会显示图片。自定义菜单直接在header.php里手动添加导航菜单。
不修改的代码,可以修改固定链接/%postname%.html
大家知道在发布文章时,会生成一个别名,如果你使用的/%postname%.html,这样样式的固定链接,那么就需要改动别名,网页后缀就以英文.html的样式展现,这种方式对英文关键词优化有利,就是设置麻烦,链接过长,不太美观。
可以实现把你已经发布的文章的ID号,套用为别名,再发布文章时发布那些没用被占用的ID作为别名。尽管如此,你会发现ID号的顺序被打乱了,从上到下6、3、1这样的样子,这就需要手动去修改发布文章时间,如此所有的ID完美实现了连续。
如果博客很多文章,可以修改文章的别名为连续的数字,如果你文章过多,手动设置太麻烦。如果你是新建博客,可以在主题functions.php里<?php下边添加如下代码。
/*新文章自动使用ID作为别名 */
add_action( ‘save_post’, ‘using_id_as_slug’, 10, 2 );
function using_id_as_slug($post_id, $post){
global $post_type;
if($post_type==’post’){
if (wp_is_post_revision($post_id))
return false;
remove_action(‘save_post’, ‘using_id_as_slug’ );
wp_update_post(array(‘ID’ => $post_id, ‘post_name’ => $post_id ));
add_action(‘save_post’, ‘using_id_as_slug’ );
}
}
使用了这段代码,无论是你的固定链接使用的是/%post_id%.html,还是/%postname%.html,链接后缀都是数字+html的形式展现。
对于已经发布的文章,如果发的文章不多的话,更新一下,就会别名就会变成数字;文章多的话,可以在根目录文件wp-config.php的最底部添加如下代码。
//批量更改旧文章的别名为ID
$slug_done = array();
$posts = $wpdb->get_results( “
SELECT
`ID`,
`post_title`
FROM
`” . $wpdb->posts . “`
WHERE
`post_type` = ‘post’
” );
foreach( $posts AS $single ) {
$this_slug = $single->ID;
$slug_done[] = $this_slug;
$wpdb->query( “
UPDATE
`” . $wpdb->posts . “`
SET
`post_name` = ‘” . $this_slug . “‘
WHERE
`ID` = ‘” . $single->ID . “‘
LIMIT 1
” );
}
添加后,访问下首页,然后再删除这段代码就行了,你再编辑文章查看别名,会发现所有的别名都变成数字了,数据库立刻小了很多。
我把这种两种方式都用上了,第一种就来排ID,第二种用来修改别名,精简数据库,依然使用/%post_id%.html的固定链接,给力吧。
原创文章,作者:Tony,如若转载,请注明出处:https://www.xxside.com/143.html
思德心语,壹群:799239814