文章ID不连续是很多强迫症博主的烦恼,尤其是使用了文章ID作为固定连接之后,每篇文章的ID并不连续,非常不友好。
下面博主就说一下详细解决办法,注意,在使用此教程之前,请备份你的WordPress数据库以防止出现任何不可预知的错误。
首先,如果你之前已经有文章了,需要根据顺序重新排列,设置一下别名,从1开始递增。批量设置别名可以把下边的代码添加到functions.php里边:
function Bing_post_id_continuous_query(){
set_time_limit( 0 );
remove_action( 'publish_post', 'Bing_post_id_continuous' );
query_posts( 'posts_per_page=-1' );
$arr = array();
while( have_posts() ){
the_post();
$post_id = $GLOBALS['post']->ID;
$arr[] = $post_id;
}
wp_reset_query();
$arr = array_reverse( $arr );
$i = 1;
foreach( $arr as $post_id ){
wp_update_post( array(
'ID' => $post_id,
'post_name' => $i++
) );
}
}
if( $_GET['post_id_continuous_query'] == 'yes' && current_user_can( 'level_10' ) ) add_action( 'init', 'Bing_post_id_continuous_query' );
然后访问下边的地址,注意替换成你的域名(访问时需以管理员身份登录)
http://kilikili.dlck.cn?post_id_continuous_query=yes
文章多的话网页加载会很慢,耐心等待加载完,加载好后,别名也就批量设置好了。
注意:此代码用完之后不用删除,留着之后有可能还需要用。
老文章设置好了,接下来就要给新文章自动设置别名了,只需要把下边的代码添加到主题的functions.php即可:
function update_post_slug_on_publish( $post_id ) {
if ( ! wp_is_post_revision( $post_id ) && !wp_is_post_autosave( $post_id ) ) {
$post = get_post( $post_id );
if ( empty( $post->post_name ) ) {
$post_number = wp_count_posts()->publish + 1;
wp_update_post( array(
'ID' => $post_id,
'post_name' => $post_number
));
}
}
}
add_action( 'save_post', 'update_post_slug_on_publish' );
这段代码会在发布文章时自动更新该文章的别名为当前已发布文章的数量加1。(包括所有类型的文章)
例如,如果已发布100篇文章,那么新发布的文章别名将自动变为101。
添加完代码之后,需要在后台的设置→固定连接里设置一下固定连接,把ID改成别名,也就是把固定连接里的post_id改成postname
最后再给一段关闭修正版本和自动草稿的代码,同样写在functions.php里:
// WordPress禁用所有文章类型的修订版本
add_filter( 'wp_revisions_to_keep', 'fanly_wp_revisions_to_keep', 10, 2 );
function fanly_wp_revisions_to_keep( $num, $post ) { return 0;}
// WordPress 禁用自动保存
add_action('wp_print_scripts','disable_autosave');
function disable_autosave(){
wp_deregister_script('autosave');
}
再说一遍,在使用此教程之前,请备份你的WordPress数据库以防止出现任何不可预知的错误。

