WordPress.org

Ready to get started?Download WordPress

Forums

nofollow plugin? (8 posts)

  1. MAVIC
    Member
    Posted 3 years ago #

    I'm using WPMS and am trying to combat attempts of it being used as a link farm. I would like to make all of the sites have rel=nofollow by default, and then allow me to disable this on a case-by-case basis.

    I searched for a plugin to do this, but didn't find it. Any ideas how to do it? I know I could edit themes, but I try to keep them stock so they can be updated easily, plus there's hundreds of them, and I don't want to have one set of themes for trusted users and one for non-trusted users.

    Thanks.

  2. David Sader
    Member
    Posted 3 years ago #

    Set blog privacy to "0" at Dashboard->Settings->Privacy:
    "I would like to block search engines, but allow normal visitors"
    This will add the following to the header:
    <meta name='robots' content='noindex,nofollow' />

    New Blog Defaults plugin will set this at blog signup.

    Or/and use WPMU PowerTools to execute the following snippet automagically on all existing blogs:
    update_option( 'blog_public', '0' );

    Or use the same header line as a plugin and activate blog by blog or drop in "mu-plugins" or network activate:

    <?php
    function ds_noindex_nofollow() {
    	echo "\n<meta name='robots' content='noindex,nofollow' />\n";
    }
    add_action( 'wp_head', 'ds_noindex_nofollow' );
    ?>
  3. David Sader
    Member
    Posted 3 years ago #

    If you want to add nofollow to every link in every post ...

    <?php
    function ds_nofollow( $text ) {
    preg_match_all("/<a.*? href=\"(.*?)\".*?>(.*?)<\/a>/i", $text, $matches);
    for($i=0;$i<count($matches[0]);$i++)
     {
      if(!preg_match("/rel=[\"\']*nofollow[\"\']*/",$matches[0][$i]))
       {
      preg_match_all("/<a.*? href=\"(.*?)\"(.*?)>(.*?)<\/a>/i", $matches[0][$i], $matches1);
      $text = str_replace(">".$matches1[3][0]."</a>"," rel='nofollow'>".$matches1[3][0]."</a>",$text);
       }
     }
    return $text;
    }
    add_action('the_content', 'ds_nofollow');
    ?>

    Pluginspiration: http://wordpress.org/extend/plugins/nolip-nofollow-links-in-posts-reborn/

    or

    add_action('the_content', 'ds_nofollow');
    function ds_nofollow( $text ) {
    		return str_replace('<a ', '<a rel="nofollow" ', $text);
    }

    Pluginspiration:: http://wordpress.org/extend/plugins/wpnofollow-all-post-links/

  4. And if you want to stop them showing up in the first place:

    http://wordpress.org/extend/plugins/moderate-new-blogs/

  5. MAVIC
    Member
    Posted 3 years ago #

    Thanks David, I'll take a closer look at the PHP you posted and see if I can make that work. As far as New Blog Defaults plugin, the user can still override it so that doesn't fix the issue. That seems to be the same with the other nofollow plugins you posted.

    I haven't made my own plugin before, but I'm sure I can figure it out.

    Andrea, that doesn't solve my issue because I don't know if these sites are spam or not. They look legit, but are in other languages and I can't read what's going on. I know I could use google translate or similar, but I'd rather just avoid being a target and thus having to manually moderate by making it clear that by default and unless I change it, all links are nofollow.

  6. David Sader
    Member
    Posted 3 years ago #

    the user can still override

    Well, you can add a plugin to prevent them from changing any option:

    <?php
    function ds_whitelist_options($whitelist) {
    // see $whitelist_options in /wp-admin/options.php
    $removed = array(
    	'privacy' => array( 'blog_public' ),
    	);
    	$whitelist = remove_option_whitelist( $removed, $whitelist );
    return $whitelist;
    }
    add_filter( 'whitelist_options', 'ds_whitelist_options' ); ?>

    or a plugin to intercept the request for the option and substitute your fixed value instead:

    <?php
    function override_foo() {
    	$bar = '0'; // the value of the option
        return $bar;
    }
    $option = 'blog_public'; // whatever blog option you like
    add_filter( 'pre_option_' . $option, 'override_foo' );
    ?>

    That seems to be the same with the other nofollow plugins you posted.

    Yes, but the snippets I've provided if placed in "mu-plugins" or Network Activated can't be changed by the user.

  7. MAVIC
    Member
    Posted 3 years ago #

    Thanks David. I totally spaced on the results of putting it in the mu-plugins directory. Thanks again.

  8. MAVIC
    Member
    Posted 3 years ago #

    I was able to create my own plugin using a variant of this:

    add_action('the_content', 'ds_nofollow');
    function ds_nofollow( $text ) {
    		return str_replace('<a ', '<a rel="nofollow" ', $text);
    }

    However, I'm running into an issue with it being activated. I want it to be activated for everyone by default, except for those whom I deactivate it for. It seems like with plugins my only two options are:
    1. Network activate - everyone has it on and I can't turn it off for selected users
    2. Activate it on a one-by-one basis manually

    Is there a plugin like New Blog Defaults that will let me choose the default plugins that are activated when a new account is created it?

    Thanks.

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags