Wordpress深度自定义tag页面Permalink的方法

  在某站下用 wordpress 构建了一个 news 的目录用于更新文章,因为根目录站点内容更新一般很少,外链不好做,所以想到整合wordpress的tag系统来增强内链,之所以用要用tag实现,是因为一般 wordpress 内链插件要手动管理关键词列表,增加了负担。

  想把 wordpress 的tag 直接与根目录网站的产品页面绑定,也就是tag是直接链接到主站点的页面去,而不是另创一个tag归档页面,这样避免在同个站点内,两个页面抢同一个词的权重,这个弊病在本网志上已经体现了。

  想到要直接改tag的permalink,wordpress后台并未提供此功能,google出来大多也只是讲后台设置,唯一有讲到的是为url 末尾添加斜杆。从这个突破点找到修改permalink生成的地方,在wp-includes/taxonomy.php的2978行:

if ( 'post_tag' == $taxonomy ){
$termlink = apply_filters( 'tag_link', $termlink, $term->term_id );
}

  这里挂了一个名为tag_link的过滤器,也叫钩子。

  关于wordpress过滤器的用法,也是刚刚看了一个例子才学会。在wp-includes/taxonomy.php的2973行:

$termlink = home_url( user_trailingslashit($termlink, 'category')) ;

  这里的user_trailingslashit函数,添加了钩子来修改permalink,为分类归档页面的permalink末尾添加一个斜杆'/'。

  对上述tag_link添加一个过滤函数,在主题目录下的functions.php里添加:

add_filter ( 'tag_link', '__tag_link');
if ( !function_exists('__tag_link') ) {
function __tag_link($string) {
return rtrim(str_replace('/news', '', $string), '/').'.htm';
}
}

  由于news目录和主站点是相对隔离的两个部分,在文章中穿插带链接的tag我想在新窗口打开,在wp-includes/category-template.php的get_the_term_list函数内(1130行):

$term_links = apply_filters( "term_links-$taxonomy", $term_links );

  对于tag挂了term_links-post_tag的过滤器,可以利用。同样地,在functions.php里添加:

add_filter ( 'term_links-post_tag', 'term_links_post_tag');
function term_links_post_tag($linkArray) {
foreach ($linkArray as $k=>$v) {
$linkArray[$k] = str_replace('rel="tag"', 'rel="tag" target="_blank"', $v);
}
return $linkArray;
}

  这样就达成最初最大程度自定义tag关键词的链接的目的,可以直接把关键词的链接改成其他网站的链接,在某些情况下会有用途。至于自动给文章中的tag词加链接,好像有现成的插件能实现。

  Wordpress的优点之一就是插件机制,可以通过新增插件对功能进行深度自定义。在我还没明白wordpress过滤器用法时,常常直接修改 wordpress 源代码,后果是无法升级到新版本。

来源:http://www.sky84.cn/index.php/article_content_id,475.html

你可能感兴趣的:(wordpress)