Skip to main content

How To Block Ads Being Shown In Certain Countries

How To Block Ads Being Shown In Certain Countries  阅读原文»

When you run ads on your WordPress site, sometimes you need to block ads being shown in certain countries. That’s what I’m doing to block visitors from some countries viewing ads to protect my Adsense account.

Google Adsense logo Image source: Google Adsense Blog

Traffic source from some certain countries may harm your Google Adsense account.

In this tutorial, I’ll show you how to write your own WordPress plugin to do it. I won’t try to build a complex plugin, but keep it simple; and sure, you can develop it to meet your needs. Let’s begin.

First of all, you need list of IP Ranges of the countries you need to block. For example, this is the US’ IP ranges. You can search these kinds of ranges easily on the Internet.

  3.0.0.0 - 4.17.135.31  4.17.135.64 - 4.17.142.255  4.17.143.16 - 4.18.32.71  4.18.32.80 - 4.18.40.135   ...

How it works? I’ll use WordPress Shortcode to display ads, once there are requests from these IPs, the plugin won’t show ads.

You can leave the IPs in the plugin file, but I prefer push them into database, working on database will make the plugin loads much faster.

We use ip2long() to convert the IPs to numbers and insert them to a table in the database:

$range = "3.0.0.0 - 4.17.135.31  4.17.135.64 - 4.17.142.255  4.17.143.16 - 4.18.32.71  4.18.32.80 - 4.18.40.135  ... "; // // Paste all the IP ranges. These are just sample ranges
                 $range=str_replace(" ","",$range);   $range = str_replace ("-",",",$range);   $range = str_replace ("\n",",",$range);   $range = explode(",",$range);
  for ($i=0;$i<=count($range);$i++) { $ipaton[$i] = sprintf("%u", ip2long($range[$i])); $ipaton[$i] = (substr($range[$i],0,3)>127) ? ((ip2long($range[$i])                & 0x7FFFFFFF) + 0x80000000) : ip2long($range[$i]); //The above two lines were broken to fit the theme's width! //It's just one line  }
  $i=0;   while ($i<count($range)) {   $s = $i+1;   $firstip[] = $ipaton[$i];   $lastip[] = $ipaton[$s];   $i=$i+1;   $i++;   }

The $firstip[] and $lastip[] of the ranges above is now something like this:

$firstip[$i] $lastip[$i]  0185088  20447231  234885120  234889215  245366784  247463935  249561088  251658239  452987904  452988927  ...

When there is a IP requests your page, the plugin will convert that IP to number using ip2long() then a function will check if the IP is between the $firstip[] and $lastip[]. Here is that function:

function blockip_check() {  global $wpdb;   $ip = $_SERVER['REMOTE_ADDR'];   $ip_aton = sprintf("%u", ip2long($ip));   $ip_aton = (substr($ip,0,3)>127) ?                   ((ip2long($ip) & 0x7FFFFFFF) + 0x80000000)                    : ip2long($ip);        //The above 3 lines were broken to fit the theme's width!        //It's just one line  $sql = "SELECT * FROM wp_blockip   WHERE $ip_aton >= startip   AND $ip_aton <= endip   ORDER BY startip DESC   LIMIT 1";   $row = $wpdb->get_row("$sql");  return $row;  }

The function return $row, if $row is empty, that means the visitor's IP is not in the table, the plugin then display ads.

$check = blockip_check();  if (empty($check)){   function ads1() {   return ''; //Display ads with no content!   }  add_shortcode( 'ads1', 'ads1' );   //If you have more ads spot, make a copy of ads1() here!
} else {
function ads1() {   return 'Ads Content 1';                  //Replace Adsense code or any ads code here!  }  add_shortcode( 'ads1', 'ads1' ); // Now you can put [ads1] to your theme or widget to display ads1 // If you have more ads spot, make a copy of ads1() here!  }

Once the plugin is activated, you can use put [ads1], [ads2]… anywhere in your theme or widget to display ads.

It’s just that simple! Let's put all together and make a complete plugin.

  1. Create a .php file and put it under the plugins folder. For example: /plugins/blockip/blockip.php
  2. Edit the source code below to meet your needs. (Change ads code, IP ranges… )
  3. Activate the plugin through the admin board.
  4. Use WordPress Shortcode to display ads, by place [yourads] in your themes or widgets.
<?php /* Plugin Name: Block IP Plugin URI: http://wordpress.com/ Description: Block ads being shown in certain countries. Version: 1.0.0 Author: nn_bien@yahoo.com Author URI: http://wordpress.com/ */  add_filter('widget_text', 'do_shortcode');  function blockip_install() { global $wpdb;  $table_name = $wpdb->prefix . "blockip"; //Your table name   $range = "3.0.0.0 - 4.17.135.31 4.17.135.64 - 4.17.142.255 4.17.143.16 - 4.18.32.71 4.18.32.80 - 4.18.40.135"; // These are sample ranges   $range=str_replace(" ","",$range);  $range = str_replace ("-",",",$range);  $range = str_replace ("\n",",",$range);  $range = explode(",",$range);   for ($i=0;$i<=count($range);$i++) {  $ipaton[$i] = sprintf("%u", ip2long($range[$i]));  $ipaton[$i] = (substr($range[$i],0,3)>127) ?                  ((ip2long($range[$i]) & 0x7FFFFFFF) + 0x80000000)                  : ip2long($range[$i]); //The above 3 lines were broken to fit the theme's width! //It's just one line  }  $i=0;  while ($i<count($range)) {   $s = $i+1;   $firstip[] = $ipaton[$i];   $lastip[] = $ipaton[$s];   $i=$i+1;   $i++;  }  if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name){  $sql = "CREATE TABLE " . $table_name . " (   startip int(11) unsigned NOT NULL default '0',   endip int(11) unsigned NOT NULL default '0',   KEY startip (startip)   );";  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');  dbDelta($sql);   $i=0; while ($i<count($range)/2){     $rows_affected = $wpdb->insert($table_name,                             array('startip' => $firstip[$i],                                   'endip' => $lastip[$i]));      //The above 3 lines were broken to fit the theme's width!      //It's just one line  $i++;   }  } }   register_activation_hook(__FILE__,'blockip_install');  function blockip_check() { global $wpdb;  $ip = $_SERVER['REMOTE_ADDR'];  $ip_aton = sprintf("%u", ip2long($ip));  $ip_aton = (substr($ip,0,3)>127) ? ((ip2long($ip) & 0x7FFFFFFF)                + 0x80000000) : ip2long($ip);     //The above two lines were broken to fit the theme's width!     //It's just one line  $sql = "SELECT * FROM wp_blockip    WHERE $ip_aton >= startip    AND $ip_aton <= endip    ORDER BY startip DESC    LIMIT 1";  $row = $wpdb->get_row("$sql"); return $row; }   $check = blockip_check();   if (!empty($check)){     function ads1() {      return '';                     //Display ads with no content!     }    add_shortcode( 'ads1', 'ads1' );     function ads2() {      return '';                     //Display ads with no content!     }    add_shortcode( 'ads2', 'ads2' ); //If you have more ads spot, make a copy of ads2() here!    } else {     function ads1() {      return 'Your Ads Code';             //Replace Adsense code or any ad code here!     }    add_shortcode( 'ads1', 'ads1' ); //Now you can put [ads1] to your theme or widget to display ads1     function ads1() {      return 'Your Ads Code'; //Replace Adsense code or any ad code here!     }    add_shortcode( 'ads2', 'ads2' ); //Now you can put [ads2] to your themes or widgets to display ads2 //If you have more ads spot, make a copy of ads2() here!        }  ?>

If you have any question, please leave comment. I will answer within my knowledge!

阅读更多内容

该邮件由 QQ邮件列表 推送。
如果您不想继续收到该邮件,可点此 退订

Comments

Popular posts from this blog

How to find ideas to post new article in your blog

How to find ideas to post new article in your blog    阅读原文»   It is true that sometimes being a blogger may face situations where I would personally like to call it your brain juices got dried up as you have pretty much ran out of topic to blog and you are in crisis as your readers are anxiously waiting for your new posts but you are unable to give in. That’s when you will probably come with excuses like I just posted last week although that post was more directly towards the newbies who stop themselves from making money but it’s still pretty much the same even though you consider yourself not a newbie. The fact is that ideas are everywhere and I mean everywhere if you know where to find it and know how to leverage it. You may be surprised that sometimes these ideas are just right in front of you but you are not observant enough to convert these ideas and turn it into your blog post. Today I will share some tips on where to get these ideas and...

Over A Year After Android Launch, ShopSavvy Finally Comes To The iPhone

ShopSavvy was one of the best early Android applications. It launched in October of last year after winning one of the initial Android Developer Challenge top prizes (when it was still known as GoCart). But despite the success it has seen on Android, one question remained: When would it be available for the iPhone. Today, it finally is. Developed by the guys at Big In Japan , ShopSavvy is an app that allows you to use your device as a portable barcode scanner. You point your phone's camera at any barcode and it will read it, do a product look up, and give you information about the product, as well as where you can find it online or at nearby stores and for how much. Obviously, something like this is a window shopper's dream. ShopSavvy was one of the best early Android applications. It launched in October of last year after winning one of the initial Android Developer Challenge top prizes (when it was still known as GoCart). But despite the success it has seen on Android, o...

Lindsay Lohan Breakup Confirmed by Lohan, Locksmith, Police [Gossip Roundup]

Farewell, last season's Suri Cruise fashions. Goodbye, Amy Winehouse's bathing suit. Adieu, humanoid version of Lauren Conrad. And so long, LiLo and SamRon's fairytale romance. Lindsay Lohan confirmed her split with Samantha Ronson and insisted the decision was part of a very healthy and mature effort to " focus on myself ." Upon hearing this, Ronson changed her locks and discussed a restraining order with police, so confident was she in Lohan's ability to turn productively inward. Lohan promptly had a run-in with the police . Who would have imagined such a messy breakup for this model relationship? Courtney Love's lawyer, on her client's drug-fueled plunge into broke-ness: ""Courtney noticed the money was gone when there wasn't any left." Deadpan gallows humor: the only possible response to having Courtney Love as a client. (Besides asking for a hefty retainer.) [ P6 ] Before Lauren Conrad's contract expired in March, MTV...