WP更新文章使用数字ID链接保持连续性的方法

WordPress技术博客wp应用技术

wordpress的数字ID固定连接,以及不连续性的问题所出现的问题

wordpress的有几种固定链接的方式,而在中文网站中,我们推荐的是使用数字链接的方式,

因为数字链接是比较简短的url,而在网站的搜索引擎优化中,url的长度是不推荐使用超过75个字符的。

wordpress的固定连接是在wordpress后台–设置–固定连接里面进行设置的:

WP更新文章使用数字ID链接保持连续性的方法

一般来说,我们只做伪静态连接,是使用数字型,并加上html的后缀,因此在自定义结构中填写/%post_id%.html

这样显示出来的url就是数字型的伪静态固定连接了。

但是wordpress的机制有一个特点,那么就是页面(page)和附件(你在文章中上传的图片、压缩包、以及其他文件统称为附件)都会占用一个wordpress的文章ID

wordpress还有一个自动保存机制和草稿机制,自动保存机制会在你每次编辑时,保存一个修订版本,

草稿机制是在你未发布文章时,也会自动保存草稿,

自动保存机制和草稿机制都会自动的占用一个文章的id。

综上所述,页面、附件、修订版本和草稿都会占用文章的id,这就会导致你的文章id并不会保持连续性,

比如发布第一篇文章ID为1,第二篇文章可能ID就是7了。

这样的不连续有的用户觉得会不太完美,希望得到一个连续性的id文章url。

通过自动保存数字别名,而使用ID作为wordpress文章的url

上面所说的机制,我们就算将修订版本和草稿完全禁止,也无法禁止附件所占用的id,因此ID的连续性如果使用数字链接模式,是无论如何也无法实现的。

除非你的文章不上传任何图片和其他附件,而这显而易见是不太可能的。

因此,在网上找到的最终解决方法,实际上也是一个替代方法,就是使文章别名(每一篇文章和页面都会有别名,别名只能是英文或者数字),自动生成连续性的数字,

以此来强制达到连续性id的效果(虽然是一种掩耳盗铃的替代方案,但是也是可以解决这个问题的,对于完全无法忍受ID不连续的用户,可以尝试使用这个方案)。

将一下代码放入你的主题function.php中(WEB主题公园的用户可以放入function/function_z.php中):

function post_id_sulg_lx( $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', 'post_id_sulg_lx', 10, 3 );

 

放入进去之后,你新产生的文章就会自动将别名作为数字id存在了

如果你在此之前已经产生了很多文章,也需要变成数字型

特别注意:如果你的文章已经被收录,网站已经有了不错的排名,那么不建议任何改变固定连接的方法!如果你之前的文章时使用英文的别名,那么使用上面的代码对新产生的文章有效就行了,旧文章就不要进行任何变动了,否则会造成大量404页面,造成搜索引擎降权!

代码如下:

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' );

放入代码之后,你需要登陆管理员账户,并执行如下命令:

你的域名/?post_id_continuous_query=yes

这样就能批量执行,将所有的文章别名修改为数字了,如果文章较多执行的时间会比较长。

最后,你需要确保你的固定连接显示的是别名连接(文章名),在自定义固定连接中填写/%postname%.html即可:

WP更新文章使用数字ID链接保持连续性的方法

 

这样就能够完成解决连续性数字固定连接的问题了,虽然不是真实的文章ID,但是也是可以连续性的。

使用这样的方式也有一定的好处,比如如果你安装了一些插件进行的拓展功能,

需要使用到文章的ID,(比如将文章变为商品,那么需要文章的ID进行查询相关信息),这样的方式可以避免文章的id被泄露。

 

上一篇:

下一篇:

文章评论

您好!请登录

取消回复
    展开更多