目录
[隐藏]

这些代码都是从万戈那边搜来的,或者说一步一步优化我的评论功能中找到的。。。 :yum: :gasp:

wordpress 评论链接重定向跳转

先说一下为什么要对评论者的链接进行重定向跳转处理。最主要的原因就是为了防止泛滥的 Spam,如果对评论者的链接进行重定向跳转,那么就算有 Spam 突破防线成功在你的页面驻扎,你也无需担心 Spam 会和当前页面抢权重了。或许你会说评论者的链接本来就已经加了 rel="external nofollow" 属性,再给链接做跳转处理是不是多此一举了?我当然不会做那样没有意义的事情,第一,百度这丫是不认识 nofollow 这个单词滴,加了 nofollow 也是白搭;第二,Google 对 nofollow 的权重分布方法已经调整过了,站内链接有可能会抢去当前页面的权重,所以仅靠 nofollow 也是不行的了。

问题的解决方法在我爱水煮鱼的博客中找到了答案:Comments Link Redirect 插件

我爱水煮鱼称其为防 Spam 的终极办法,此言不虚啊。不过我向来比较排斥使用插件,我看了一下 Comments Link Redirect 插件的代码,完全可以复制到 functions.php 中来代替使用插件。将以下代码复制到主题文件夹下的 functions.php 中即可。

//comments link redirect
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 = ''){
$text=str_replace('href="', 'href="'.get_option('home').'/?r=', $text);
$text=str_replace("href='", "href='".get_option('home')."/?r=", $text);
return $text;
}
add_action('init', 'redirect_comment_link');
function redirect_comment_link(){
$redirect = $_GET['r'];
if($redirect){
if(strpos($_SERVER['HTTP_REFERER'],get_option('home')) !== false){
header("Location: $redirect");
exit;
}
else {
header("Location: http://wange.im/");
exit;
}
}
}

然后再看评论者和评论者留言中的链接,形式如下:

http://wange.im/?r=http://评论者的URL

不过据测试,如果使用了 cos-html-cache 静态化插件,会导致我爱水煮鱼的 Comments Link Redirect 插件无法正常使用。

在新窗口中打开 WordPress 评论者链接

WordPress 程序源码写的很规范,符合 W3C 的 xhtml1-strict.dtd 标准。比说,让评论者链接在新窗口中打开,Wordpress 用的是 rel="external",而不是 target="_blank"。符合规范,这当然是好事啦,但是我们知道仅凭 rel="external" 是不能独自完成在新窗口打开的任务的,还需要一个 external.js 配合才行,而 WordPress 源程序中并没有包含 external.js 这个文件,也很少有主题将这个脚本纳入其中。

这里提供两种方案使 WordPress 评论者的链接在新窗口打开。

方法一:用 rel="external" 实现。

1、将以下代码另存为 external.js 文件。

function externallinks() {
if (!document.getElementsByTagName) return;
var anchors = document.getElementsByTagName("a");
for (var i=0; i<anchors.length; i++) {
var anchor = anchors[i];
if (anchor.getAttribute("href") &&
anchor.getAttribute("rel") == "external nofollow")
anchor.target = "_blank";
}
}
window.onload = externallinks;

2、然后将 external.js 文件上传到主题根目录下,并用以下方式调用。

<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/external.js"></script>

方法二:用 target="_blank" 实现。(转自 荒野无灯,原址请见http://www.hacklog.cn/php/wordpress-comment-author-link-open-in-new-window.html

1、打开/wp-includes/comment-template.php,查找“function get_comment_author_link”。

2、在第148行(Wordpress 2.8.4,其他版本可参照)处添加 target='_blank',如下:

$return = "<a href='$url' target='_blank' rel='external nofollow' class='url'>$author</a>";

我现在用的是方法二,荒野无灯的方法,效果可以点击下面的留言中评论者链接。

WordPress 去掉评论中链接的方法

俗话说道高一尺,魔高一丈,既然做了一名 WordPress 独立博客的博主,就要有与垃圾评论斗争到底的信心与决心,但是作为一名打不走,骂不离,死皮赖脸的 Spammer,就要做好与各位博主们周旋的准备。我见的最多的垃圾评论就是在留言中 Ctrl+C、Ctrl+V 千篇一律的话,什么“过来踩踩”、“博主加油”,然后撒下一坨链接就闪人了。这是最没有职业素养的 Spammer(……此处省略三千字对垃圾评论的无限鄙视……)

要防止垃圾评论对 WordPress 本身权重的影响,Wordpress 本身的 nofollow 标签肯定是不够的,所以我还用了 WordPress 评论链接重定向跳转,如果你觉得这还不够彻底的话,可以用这个方法,索性把 WordPress 评论中包括链接的 a 标签过滤掉,只剩下一个无法点击的链接文本。

方法和过滤并替换 WordPress 留言指定字符是差不多的,也是用的钩子,外加一个 PHP 的正则表达式,把链接过滤出来,把以下代码复制到 WordPress 主题文件夹的 functions.php 中就可以了:

add_filter('comment_text', 'no_url_text', 10);
function no_url_text($text = ''){
$text = preg_replace("/<a[^>]*href=[^>]*>|<\/[^a]*a[^>]*>/i","",$text);
echo $text;
}

童鞋们不用在我这里测试了,因为我没有用上,这里是纯解说,无实践。

另外,如果你觉得这还不够彻底,那还有一个更绝的!就是把所有评论者的链接都去掉,不过这样的话在干掉 Spammer 的同时也会干掉所有无辜的博友,请慎用啊。去掉 WordPress 评论者的链接,看到很多参考方法都说改 WordPress 的源文件,其实我不建议那么干,一方面这个方法太原始,咱要玩高级的;另一方面,以后 WordPress 升级就会覆盖掉,所以我们还是在主题文件的 functions.php 中添加钩子比较好:

add_filter('get_comment_author_link', 'no_url_author', 20);
function no_url_author($text = ''){
$text = preg_replace("/<a[^>]*href=[^>]*>|<\/[^a]*a[^>]*>/i","",$text);
echo $text;
}

这下世界就清静了,不过做的太狠,你的博客也会很清静哟,三思而行吧。

所有这些的效果呢。。。可以看我的网站。我只加上了第一第二项功能,第三项没加上。。。你说如果人家留个言然后你想过去的话还得自己复制粘贴地址多麻烦。。。     哈哈 :hot: :up: