WP笔记

如何nofollow Blogroll中的链接

Blogroll通常用于友情链接,一看到这个题目或许很多人要抱怨了,友情链接怎么可以nofollow!没错,友链nofollow绝对是不道德被人鄙视的行为,但Blogroll不是为友情链接而存在的,正如WordPress不仅可以做Blog也可作CMS。

Blogroll

Blogroll可以做什么

Blogroll是一个WordPress内置的Link Manager,和文章一样,Blogroll也具备分类管理的能力,显然友情链接最多只是其中一个分类。Blogroll可以做什么?

  • 网络收藏夹,看到好的文章赶紧放进来,浏览器收藏夹很容易丢;
  • 相关资源链接;
  • 广告链接,blogroll允许添加图片,放一些affiliate program很合适,我想大多数人不想follow这些网站;
  • 总之,Blogroll的用法很多,如果你在一个页面放满链接,全部follow,我想搜索引擎不会喜欢。是否follow应该取决于你,所以需要知道如何nofollow。

如何nofollow Blogroll链接?

最理想的方法

rel在WordPress中用XFN(连接关系网)来表达,如果你在链接编辑页面中没找到这个box,去显示选项里翻翻。

XFN

如果能在XFN Meta Box中添加一项Nofollow,似乎很理想,可惜WordPress输出这个Meta Box的代码没有提供任何hooks让我们干涉输出过程。如果执意要加,就需要修改核心代码,网上不缺这种教程,谷歌一下。对我来说,修改核心代码是最后的选择。结果理想,没错,但理想和现实总是有差距的。

懒人的方法

装插件,一键搞定,例如Ultimate Nofollow,一款很精简的插件,可以帮助我们nofollow Blogroll链接,但也有点多余的功能,比如有是否Nofollow全部Blogroll链接,如果你要做友情链接,这个不能用。还能nofollow评论链接,显然对于现在的WordPress,这个没啥用了。

喜欢折腾的人的选择

如果追求简单、性能和轻量级,直接将需要的代码放到functions.php中是最好的选择,当然你可以将这部分代码单独存放在文件中,需要的时候include进去就行了。

扒了一下Ultimate Nofollow的代码,把需要的部分弄出来,只实现Nofollow Blogroll的功能,基于单个链接设置,没有全局功能。

思路是这样:

  1. 在编辑链接的页面创建一个Meta Box,XFN本身也是Meta Box,只是裹得太严实没地方下手,所以只能自己新建一个。
  2. Meta Box中只需要一个checkbox,询问用户是否nofollow当前连接,然后用filter拦截一下保存数据的过程,将我们的rel设置加进去
  3. 还有第三步吗?第三步就是记得点保存按钮,数据已经写进数据库了,怎么显示是WordPress的事了。

下面看代码

<?php
/**
 * 一下两个钩子是为了保证代码只在links页面显示
 * 如果你想了解更多load-$page action的信息,访问http://codex.wordpress.org/Adding_Administration_Menus#Page_Hook_Suffix
 */
add_action('load-link.php', 'sola_blogroll_nofollow');
add_action('load-link-add.php', 'sola_blogroll_nofollow');

function sola_blogroll_nofollow() {
    //通过action add_meta_boxes创建我们需要的Meta Box
    add_action('add_meta_boxes', 'sola_blogroll_add_meta_box', 1, 1);
    //通过filter pre_link_rel将数据保存
    add_filter('pre_link_rel', 'sola_blogroll_save_meta_box', 10, 1);
}

//创建Nofollow Meta Box
function sola_blogroll_add_meta_box() {
    //翻译成中文就是,创建一个名叫Blogroll Nofollow的Meta Box,放在link页面的右侧边栏,Meta Box的结构
    //由函数sola_blogroll_inner_meta_box产生
    add_meta_box('sola_blogroll_nofollow_div', __('Blogroll Nofollow'), 'sola_blogroll_inner_meta_box', 'link', 'side');
}

//输出Meta Box的HTML结构
function sola_blogroll_inner_meta_box($post) {
    $bookmark = get_bookmark($post->ID, 'ARRAY_A');
    if (strpos($bookmark['link_rel'], 'nofollow') !== FALSE)
        $checked = ' checked="checked"';
    else
        $checked = '';
    ?>
    <label for="sola_blogroll_nofollow_checkbox"><?php echo __('Nofollow this link?'); ?></label>
    <input value="1" id="sola_blogroll_nofollow_checkbox" name="sola_blogroll_nofollow_checkbox"<?php echo $disabled; ?> type="checkbox"<?php echo $checked; ?> /> <?php echo $message; ?>
    <?php
}

//保存用户的选择
function sola_blogroll_save_meta_box($link_rel) {
    $rel = trim(str_replace('nofollow', '', $link_rel));
    if ($_POST['sola_blogroll_nofollow_checkbox'])
        $rel .= ' nofollow';
    return trim($rel);
}
?>

把这段代码放到主题的functions.php中,就可以在链接编辑页面看到选项了,并且不会与其它的rel选项冲突

nofollow-box

下载源代码

将文件include到functions.php中,或者直接将代码拷贝到functions.php中使用

[download id=31]

参考文章

Make blogroll links no-follow?

Meta Box vs. Custom Fields

4条评论

评论已关闭。