如何解决wordpress更新文章的固定链接ID不连续问题
如果你是通过搜索关键词打开本页的用户 那么恭喜你 本篇记录将会实际解决你的问题,这个问题说大不大 说小呢 但是文章 ID不连续对于部分“完美者” “强迫症” 的博主来说就是抓头发的了(最先无情也是这样 ,尤其是使用了文章 ID 作为固定连接之后,每篇文章的 ID 并不连续,非常不好(心情上哈 对于蜘蛛的话 影响不是特别大)。
从原因来看,文章 ID 不连续主要是因为自动保存的文章、媒体、页面和其它文章类型占用了 ID 导致的,网上的解决方法一般是强制的禁止自动草稿、不在媒体库上传媒体、不建立页面等等,但这种方法会导致使用上的不便利,而且很有局限性。
解决方案 本文说的方法也是治标不治本,但却能比较好的解决链接上的 ID 不连续这个问题。这个方法就是利用别名,自动给文章设置一个别名,别名按顺序递增,然后把固定连接设置成别名。
OK 既然是冲着解决问题来得 我们废话就不多说了 直接开始进行吧:
批量修改历史文章
第一如果你之前已经有文章了,那么就需要根据顺序重新排列,设置一下别名,从 1 开始递增。批量设置别名可以把下边的代码添加到你主题里 functions.php 里边(位置在wp后台>左侧栏目:外观>主题编辑器>右侧主题文件:模板函数):
//批量修改历史文章板块
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' );
搞完上面的操作后记得点击下更新文件
然后访问下边的地址,注意替换成你的域名(访问时需以管理员身份登录):
shouye
如果你以前文章多的话网页加载会很慢,耐心等待加载完,(具体跟你服务器配置有关系)
加载好后,别名也就批量设置好了。 注意:此代码用完之后不用删除,留着之后有可能还需要用。
新文章自动设置
老文章设置好了,接下来就要给新文章自动设置别名了,只需要把下边的代码添加到主题的 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.
修改固定链接
添加完代码之后,需要在后台的 “设置” → “固定连接” 里设置一下固定连接,把 ID 改成别名,也就是把固定连接里的 post_id 改成postname
可以像我这样设置 /%category%/%postname%.html
如果你不想带有分类的话就是 /%postname%.html (具体是什么样的 你自己设置了保存看演示 技术这个东西就是要多尝试多操作)
如果因为删除、更新或者其它原因导致文章的 “ID” 不连续了,可以使用上边的那个批量设置的代码重新归位。
如果网站已经存在很多文章,出于SEO考虑可以使用下面的方法
把代码放到主题的 functions.php:
function Bing_post_name_id(){
query_posts( 'posts_per_page=-1' );
while( have_posts() ){
the_post();
$post_id = $GLOBALS['post']->ID;
wp_update_post( array(
'ID' => $post_id,
'post_name' => $post_id
) );
}
wp_reset_query();
}
if( $_GET['post_name_id'] == 'yes' ) add_action( 'init', 'Bing_post_name_id' );
然后访问下边的地址,注意替换成你的域名(访问时需以管理员身份登录):
shouye
文章多的话网页加载会比较慢,因为正在一篇文章一篇文章的修改别名,要耐心等到网页完全加载好才可以。
加载好后,删除之前添加的代码,修改完成,所有文章的别名都会变成自身的 ID.
本文思维原创来自:逍遥乐
注:无情建议最好还是不要改 因为原装的一定是有道理的 不然到后期 各种不兼容 等等问题出现 就是连环问题了!