IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    WordPress为非友情链接添加nofollow属性的方法

    小残发表于 2016-10-14 03:24:08
    love 0

    很多情况下我们不想在友情链接中传递权重,那么就可以为该链接添加nofollow属性的。

    但是小残觉得在添加链接时,最后还是不要添加nofollow..默认情况下wordpress“链接关系(XFN)”列表中并无 nofollow 选项。如图:

    2016-08-25_211417

    那么如何添加 nofollow 选项呢?

    方法1:直接修改源代码

    以WordPress 4.5.3为例,编辑/wp-admin/includes/meta-boxes.php,在1145行添加如下代码:

    <tr>
      <th scope="row">nofollow</th>   
      <td>
        <fieldset>
          <legend class="screen-reader-text"><span> nofollow </span></legend> 
          <label for="nofollow"><input class="valinp" type="checkbox" name="nofollow" value="nofollow" id="nofollow" <?php xfn_check('nofollow'); ?> />nofollow</label>
        </fieldset>
      </td>
    </tr>

    PS:不太推荐修改WP源代码,因为每次更新你都要修改一遍。

    方法2:使用Add-nofollow-to-XFN插件

    如果你不想折腾代码,可以使用插件Add-nofollow-to-XFN实现同样效果。当然,你也可以在主题的 functions.php 添加下面的代码(来自于插件):

    /*
    Plugin Name: Add-nofollow-to-XFN
    Plugin URI: http://www.exehack.net
    Description: 在后台链接管理的XFN关系中添加一个 nofollow 标签
    Author: Slyar
    Version: 1.2
    Author URI: http://www.exehack.net/
    */
    function admin_xfn() {?>
    <script type="text/javascript">
    addLoadEvent(addNofollowTag);
    function addNofollowTag() {
      tables = document.getElementsByTagName('table');
      for(i=0;i<tables.length;i++) {
        if(tables[i].getAttribute("class") == "links-table") {
          tr = tables[i].insertRow(1);
          th = document.createElement('th');
          th.setAttribute('scope','row');
          th.appendChild(document.createTextNode('Follow'));
          td = document.createElement('td');
          tr.appendChild(th);
          label = document.createElement('label');
          input = document.createElement('input');
          input.setAttribute('type','checkbox');
          input.setAttribute('id','nofollow');
          input.setAttribute('value','nofollow');
          label.appendChild(input);
          label.appendChild(document.createTextNode(' nofollow'));
          td.appendChild(label);
          tr.appendChild(td);
          input.name = 'nofollow';
          input.className = 'valinp';
          if (document.getElementById('link_rel').value.indexOf('nofollow') != -1) {
            input.setAttribute('checked','checked');
          }
          return;
        }
      }
    }
    </script>
    <?php
    }
    add_action('admin_head','admin_xfn');

    方法3:创建一个独立的Meta选项

    仍旧可以添加到主题的 functions.php :

    /**
     * 一下两个钩子是为了保证代码只在links页面显示
     */
    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);
    }

    效果:

    wp-update-error-2

    PS:其实很早的版本开始,WordPress 就默认隐藏了这个单独的链接管理功能(新安装WP的朋友估计是看不到了),推荐大家使用自定义菜单来实现,不过很多主题作者仍旧使用链接管理功能,所以一般的用户也只能跟着用。还是推荐主题作者可以更换为自定义菜单功能哦。


    博客头像
    作者: 小残 绳命不息 |折腾不止 |我一天不折腾心里难受
    转载请以链接形式注明本文地址:https://www.exehack.net/3917.html
    版权所有© 小残's Blog – 关注网络安全 | 本网站内容采用 BY-NC-SA 进行授权。


沪ICP备19023445号-2号
友情链接