将WordPress的tag标签改成使用“数字ID”的固定链接形式

我们经常遇到给WordPress文章添加tag,特别是添加中文tag后出现被强制urlencode转义成类似下面的字符串baidu.com/tag/%e6%8a%97%e6%8a%95%e8%af%89%e5%9f%9f%e5%90%8d/。实际上只需要修改一下代码就可以将这些转义字符改为固定数字ID的链接形式。

代码如下,添加到主题的functions.php里面:


// WordPress 文章标签以id方式展示
add_action('generate_rewrite_rules','tag_rewrite_rules');
add_filter('term_link','tag_term_link',10,3);
add_action('query_vars', 'tag_query_vars');
function tag_rewrite_rules($wp_rewrite){
$new_rules = array(
'tag/(\d+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?tag_id=$matches[1]&feed=$matches[2]',
'tag/(\d+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?tag_id=$matches[1]&feed=$matches[2]',
'tag/(\d+)/embed/?$' => 'index.php?tag_id=$matches[1]&embed=true',
'tag/(\d+)/page/(\d+)/?$' => 'index.php?tag_id=$matches[1]&paged=$matches[2]',
'tag/(\d+)/?$' => 'index.php?tag_id=$matches[1]',
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

function tag_term_link($link,$term,$taxonomy){
if($taxonomy=='post_tag'){
return home_url('/tag/'.$term->term_id);
}
return $link;
}

function tag_query_vars($public_query_vars){
$public_query_vars[] = 'tag_id';
return $public_query_vars;
}

代码改好后,需要进入后台,设置-固定链接-保存一下或者修改一下重新改回来保存然固定链接生效,否则新标签链接全部 404。

One comment

  1. 我测试下评论!

发表回复

您的电子邮箱地址不会被公开。