How to add an option for “nofollow” to the Link editor’s existing “Link Relationship(XFN) options list?

How difficult would it be to add an option for “nofollow” to the Link editor’s existing “Link Relationship(XFN) options list?

Alternately, or better yet, in addition, add an item to the “Bulk Actions” listing called “Make links no follow” that would make all selected links rel=”nofollow”.

Read More

I’d like to add this feature to my theme’s functions.php

Related posts

Leave a Reply

4 comments

  1. Alternatively you can undo the code that disables the relationship box by re-pointing the enqueue to the xfn.js script..

    First create a modified version of that script, like so..

    jQuery(document).ready( function($) {
        //$('#link_rel').attr('readonly', 'readonly');
        $('#linkxfndiv input').bind('click keyup', function() {
            var isMe = $('#me').is(':checked'), inputs = '';
            $('input.valinp').each( function() {
                if (isMe) {
                    $(this).attr('disabled', 'disabled').parent().addClass('disabled');
                } else {
                    $(this).removeAttr('disabled').parent().removeClass('disabled');
                    if ( $(this).is(':checked') && $(this).val() != '')
                        inputs += $(this).val() + ' ';
                }
            });
            $('#link_rel').val( (isMe) ? 'me' : inputs.substr(0,inputs.length - 1) );
        });
    });
    

    Save as xfn.js and place into a plugin’s folder or the current theme’s folder.

    NOTE: It’s a direct copy of the original(existing) script enqueued by WordPress, i’ve left original code that sets the rel input to read-only so you can see what’s been changed(one line).

    Then add this to your plugin code, or theme’s functions.php, and uncomment the appropriate line in the code sample..

    function switch_xfn_src( $src, $handle ) {
        if( 'xfn' == $handle )
            //$src = plugins_url( '/xfn.js', __FILE__ ); // For use inside plugin
            //$src = get_bloginfo( 'stylesheet_directory' ) . '/xfn.js'; // For use inside theme
        return $src;
    }
    add_filter( 'script_loader_src', 'switch_xfn_src', 10, 2 );
    

    Job done… 🙂

  2. Here’s a function which removes the existing link_xfn meta box, and adds another identical one with a checkbox for “nofollow”:

    add_action( 'admin_menu', 'nofollow_enabled_xfn_box' );
    
    function nofollow_enabled_xfn_box() {
        global $pagenow;
        if ( $pagenow != 'link.php' ) return;
    
        remove_meta_box( 'linkxfndiv', 'link', 'normal' );
        add_meta_box('linkxfndiv', __('Link Relationship (XFN)'), 'se5160_link_xfn_meta_box', 'link', 'normal' );
    }
    
    /**
     * Modified xfn form fields box, with "nofollow" link.
     *
     * @based on function link_xfn_meta_box() (from /wp-admin/includes/meta-boxes.php)
     *
     * @param object $link
     */
    function se5160_link_xfn_meta_box($link) {
    ?>
    <table class="editform" style="width: 100%;" cellspacing="2" cellpadding="5">
        <tr>
            <th style="width: 20%;" scope="row"><label for="link_rel"><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('rel:') ?></label></th>
            <td style="width: 80%;"><input type="text" name="link_rel" id="link_rel" size="50" value="<?php echo ( isset( $link->link_rel ) ? esc_attr($link->link_rel) : ''); ?>" /></td>
        </tr>
        <tr>
            <td colspan="2">
                <table cellpadding="3" cellspacing="5" class="form-table">
                    <tr>
                    <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('nofollow') ?> </th>
                    <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('not a trusted link') ?> </span></legend>
                        <label for="nofollow">
                        <input class="valinp" type="checkbox" name="nofollow" value="nofollow" id="nofollow" <?php xfn_check('seo','nofollow'); ?> />
                        <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('not a trusted link') ?></label>
                        </fieldset></td>
                    </tr>
                    <tr>
                        <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('identity') ?> </th>
                        <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('identity') ?> </span></legend>
                            <label for="me">
                            <input type="checkbox" name="identity" value="me" id="me" <?php xfn_check('identity', 'me'); ?> />
                            <?php _e('another web address of mine') ?></label>
                        </fieldset></td>
                    </tr>
                    <tr>
                        <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('friendship') ?> </th>
                        <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('friendship') ?> </span></legend>
                            <label for="contact">
                            <input class="valinp" type="radio" name="friendship" value="contact" id="contact" <?php xfn_check('friendship', 'contact'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('contact') ?></label>
                            <label for="acquaintance">
                            <input class="valinp" type="radio" name="friendship" value="acquaintance" id="acquaintance" <?php xfn_check('friendship', 'acquaintance'); ?> />  <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('acquaintance') ?></label>
                            <label for="friend">
                            <input class="valinp" type="radio" name="friendship" value="friend" id="friend" <?php xfn_check('friendship', 'friend'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('friend') ?></label>
                            <label for="friendship">
                            <input name="friendship" type="radio" class="valinp" value="" id="friendship" <?php xfn_check('friendship'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('none') ?></label>
                        </fieldset></td>
                    </tr>
                    <tr>
                        <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('physical') ?> </th>
                        <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('physical') ?> </span></legend>
                            <label for="met">
                            <input class="valinp" type="checkbox" name="physical" value="met" id="met" <?php xfn_check('physical', 'met'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('met') ?></label>
                        </fieldset></td>
                    </tr>
                    <tr>
                        <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('professional') ?> </th>
                        <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('professional') ?> </span></legend>
                            <label for="co-worker">
                            <input class="valinp" type="checkbox" name="professional" value="co-worker" id="co-worker" <?php xfn_check('professional', 'co-worker'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('co-worker') ?></label>
                            <label for="colleague">
                            <input class="valinp" type="checkbox" name="professional" value="colleague" id="colleague" <?php xfn_check('professional', 'colleague'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('colleague') ?></label>
                        </fieldset></td>
                    </tr>
                    <tr>
                        <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('geographical') ?> </th>
                        <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('geographical') ?> </span></legend>
                            <label for="co-resident">
                            <input class="valinp" type="radio" name="geographical" value="co-resident" id="co-resident" <?php xfn_check('geographical', 'co-resident'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('co-resident') ?></label>
                            <label for="neighbor">
                            <input class="valinp" type="radio" name="geographical" value="neighbor" id="neighbor" <?php xfn_check('geographical', 'neighbor'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('neighbor') ?></label>
                            <label for="geographical">
                            <input class="valinp" type="radio" name="geographical" value="" id="geographical" <?php xfn_check('geographical'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('none') ?></label>
                        </fieldset></td>
                    </tr>
                    <tr>
                        <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('family') ?> </th>
                        <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('family') ?> </span></legend>
                            <label for="child">
                            <input class="valinp" type="radio" name="family" value="child" id="child" <?php xfn_check('family', 'child'); ?>  />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('child') ?></label>
                            <label for="kin">
                            <input class="valinp" type="radio" name="family" value="kin" id="kin" <?php xfn_check('family', 'kin'); ?>  />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('kin') ?></label>
                            <label for="parent">
                            <input class="valinp" type="radio" name="family" value="parent" id="parent" <?php xfn_check('family', 'parent'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('parent') ?></label>
                            <label for="sibling">
                            <input class="valinp" type="radio" name="family" value="sibling" id="sibling" <?php xfn_check('family', 'sibling'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('sibling') ?></label>
                            <label for="spouse">
                            <input class="valinp" type="radio" name="family" value="spouse" id="spouse" <?php xfn_check('family', 'spouse'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('spouse') ?></label>
                            <label for="family">
                            <input class="valinp" type="radio" name="family" value="" id="family" <?php xfn_check('family'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('none') ?></label>
                        </fieldset></td>
                    </tr>
                    <tr>
                        <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('romantic') ?> </th>
                        <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('romantic') ?> </span></legend>
                            <label for="muse">
                            <input class="valinp" type="checkbox" name="romantic" value="muse" id="muse" <?php xfn_check('romantic', 'muse'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('muse') ?></label>
                            <label for="crush">
                            <input class="valinp" type="checkbox" name="romantic" value="crush" id="crush" <?php xfn_check('romantic', 'crush'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('crush') ?></label>
                            <label for="date">
                            <input class="valinp" type="checkbox" name="romantic" value="date" id="date" <?php xfn_check('romantic', 'date'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('date') ?></label>
                            <label for="romantic">
                            <input class="valinp" type="checkbox" name="romantic" value="sweetheart" id="romantic" <?php xfn_check('romantic', 'sweetheart'); ?> />
                            <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('sweetheart') ?></label>
                        </fieldset></td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
    <p><?php _e('If the link is to a person, you can specify your relationship with them using the above form. If you would like to learn more about the idea check out <a href="http://gmpg.org/xfn/">XFN</a>.'); ?></p>
    <?php
    }
    

    A lot of copypasta from core, but its better than a hack. You of course are free to change the xfn options in any way you want.