Table of Contents
WordPress评论者链接重定向跳转并在新窗口中打开
一、评论者链接重定向
细心的朋友可能会注意到,在一些 WordPress 博客 上,随便打开一篇文章,把鼠标放在任意一个评论者名称上时,浏览器状态栏显示的地址可能是这样的形式:
http://earn.yesmall.biz/?r=http://earnfs.sinaapp.com/
点击后,浏览器仍然会跳转到评论者的网站。再观察自己站点上的评论链接,默认情况下评论者链接会直接显示为评论者填写的网址。两者最终打开的目标页面一样,但从站点链接结构来看,默认形式会让每一条评论都成为一个外链,可能分散站点权重。把它改成站内重定向地址,效果会更可控一些。
方法是在当前主题的 functions.php 中加入下面的代码。更推荐放在子主题或自定义插件里,避免主题升级时被覆盖。
// 评论者链接重定向。
add_filter('get_comment_author_link', 'add_redirect_comment_link', 5);
add_filter('comment_text', 'add_redirect_comment_link', 99);
function add_redirect_comment_link($text = '') {
$home = home_url('/');
$text = str_replace('href="', 'href="' . esc_url($home) . '?r=', $text);
$text = str_replace("href='", "href='" . esc_url($home) . '?r=', $text);
return $text;
}
add_action('init', 'redirect_comment_link');
function redirect_comment_link() {
if (empty($_GET['r'])) {
return;
}
$redirect = esc_url_raw(wp_unslash($_GET['r']));
if (!$redirect) {
wp_redirect(home_url('/'));
exit;
}
if (!empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], home_url()) !== false) {
wp_redirect($redirect);
exit;
}
wp_redirect(home_url('/'));
exit;
}
如果还有特殊需求,也可以用同样思路处理评论正文中的 URL 链接。不过评论正文里的链接数量和来源更复杂,修改前最好先在测试环境检查输出结果,避免误改站内链接或后台生成的链接。
二、评论链接在新窗口打开
WordPress 默认的评论者链接是在当前窗口中打开的。访客点击评论者链接之后会离开你的站点,很多时候流量就是在这个时候丢失的。
旧方法是直接修改 wp-includes/comment-template.php,在下面这段代码中的 rel="external nofollow" 后面加入 target="_blank":
if (empty($url) || 'http://' == $url) {
$return = $author;
} else {
$return = "<a rel=\"external nofollow\" href=\"$url\">$author</a>";
}
return apply_filters('get_comment_author_link', $return);
不过不建议直接改 WordPress 核心文件,因为升级 WordPress 时这些改动会被覆盖。更稳妥的方式仍然是在主题的 functions.php 或自定义插件中通过过滤器处理:
add_filter('get_comment_author_link', 'comment_author_link_new_window', 20);
function comment_author_link_new_window($link) {
if (empty($link)) {
return $link;
}
$link = str_replace('<a ', '<a target="_blank" ', $link);
if (strpos($link, 'rel=') === false) {
$link = str_replace('<a ', '<a rel="external nofollow noopener" ', $link);
} else {
$link = str_replace('rel="external nofollow"', 'rel="external nofollow noopener"', $link);
$link = str_replace("rel='external nofollow'", "rel='external nofollow noopener'", $link);
}
return $link;
}
最后,建议在 robots.txt 中增加一行,告诉搜索引擎不要抓取这些跳转地址:
Disallow: /?r=*
保存后刷新页面,检查评论者链接是否已经变成站内跳转地址,并确认点击后会在新窗口中打开目标网站。
