文章 ID 不连续是很多 “强迫症” 博主的烦恼,尤其是使用了文章 ID 作为固定连接之后,每篇文章的 ID 并不连续,非常不好。
从原因来看,文章 ID 不连续主要是因为自动保存的文章、媒体、页面和其它文章类型占用了 ID 导致的,网上的解决方法一般是强制的禁止自动草稿、不在媒体库上传媒体、不建立页面等等,但这种方法会导致使用上的不便利,而且很有局限性。
解决方案 本文说的方法也是治标不治本,但却能比较好的解决链接上的 ID 不连续这个问题。这个方法就是利用别名,自动给文章设置一个别名,别名按顺序递增,然后把固定连接设置成别名。
批量设置 首先,如果你之前已经有文章了,需要根据顺序重新排列,设置一下别名,从 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://example.com?post_id_continuous_query=yes
文章多的话网页加载会很慢,耐心等待加载完,加载好后,别名也就批量设置好了。
注意:此代码用完之后不用删除,留着之后有可能还需要用。
新文章自动设置
老文章设置好了,接下来就要给新文章自动设置别名了,
只需要把下边的代码添加到主题的 functions.php 即可:
function Bing_post_id_continuous( $id, $post, $update ){ if( $update || $post->post_status != 'publish' ) return; $action = 'save_post_post'; $func = 'Bing_post_id_continuous'; remove_action( $action, $func, 10 ); wp_update_post( array( 'ID' => $id, 'post_name' => wp_count_posts()->publish + 1 )); add_action( $action, $func, 10, 3 ); } add_action( 'save_post_post', 'Bing_post_id_continuous', 10, 3 );
添加好后,每发布一篇文章,别名都会自动设置成当前发布文章的数量加 1.
修改固定链接
需要在后台的 “设置” → “固定连接” 里设置一下固定连接,代码如下:
/%postname%.html