Title: Smart Country Blocker
Author: Shakib R Khan
Published: <strong>July 22, 2026</strong>
Last modified: July 22, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/smart-country-blocker.svg)

# Smart Country Blocker

 By [Shakib R Khan](https://profiles.wordpress.org/shakibrkhan/)

[Download](https://downloads.wordpress.org/plugin/smart-country-blocker.1.0.4.zip)

 * [Details](https://vec.wordpress.org/plugins/smart-country-blocker/#description)
 * [Reviews](https://vec.wordpress.org/plugins/smart-country-blocker/#reviews)
 *  [Installation](https://vec.wordpress.org/plugins/smart-country-blocker/#installation)
 * [Development](https://vec.wordpress.org/plugins/smart-country-blocker/#developers)

 [Support](https://wordpress.org/support/plugin/smart-country-blocker/)

## Description

**IMPORTANT: This plugin uses external third-party services (ipwho.is and ipapi.
co) to determine visitor location. Please review the “External Services” section
below for details on data transmission and privacy.**

Smart Country Blocker is a powerful WordPress plugin that allows you to restrict
access to your website based on visitor location. Block unwanted traffic from specific
countries on both frontend pages and backend admin areas.

**Key Features:**

 * 🌍 **Complete Country List** – Select from 195+ countries worldwide
 * 🎯 **Frontend & Backend Blocking** – Block both website pages and wp-admin/wp-
   login.php
 * 📊 **Comprehensive Logging** – Track all blocked access attempts with IP, country,
   URL, and timestamp
 * 📈 **Statistics Dashboard** – View total blocks, unique IPs, and blocked countries
   count
 * 🔍 **Advanced Filtering** – Filter and sort logs by country, date, IP address
 * 📄 **Pagination** – Manage large log datasets with 20 records per page
 * ⚡ **Quick Remove** – Remove countries from blocked list with one click
 * 🔒 **Cache-Friendly** – Compatible with major caching plugins (see configuration
   below)
 * 🎨 **Customizable Block Page** – Edit blocked.php to customize the access denied
   page
 * 🖥️ **Easy-to-Use Interface** – Checkbox selection with search functionality

### Important: Cache Plugin Compatibility

**CRITICAL:** If you use a caching plugin (WP Rocket, W3 Total Cache, WP Super Cache,
LiteSpeed Cache, etc.), cached pages may bypass country blocking. Follow these configuration
steps:

#### WP Rocket Configuration

WP Rocket should work automatically as the plugin sets the `DONOTCACHEPAGE` constant.
However, for best results:

 1. Go to **WP Rocket** > **Settings** > **Advanced Rules**
 2. Add this to “Never Cache URL(s)”:
     `/(.*)` (Only if you want to disable cache completely
    for blocked countries)
 3. The plugin automatically prevents caching for blocked visitors

#### W3 Total Cache Configuration

 1. Go to **Performance** > **Page Cache**
 2. Scroll to “Never cache the following pages:”
 3. Add: `*` (if you want complete blocking to bypass cache)
 4. OR go to **Performance** > **General Settings**
 5. Enable “Page Cache” > “Don’t cache pages for logged in users”

#### WP Super Cache Configuration

WP Super Cache should work automatically as the plugin sets no-cache headers. To
verify:

 1. Go to **Settings** > **WP Super Cache**
 2. Make sure “Don’t cache pages with GET parameters” is enabled
 3. The plugin sends proper no-cache headers for blocked visitors

#### LiteSpeed Cache Configuration

 1. Go to **LiteSpeed Cache** > **Cache**
 2. Under “Do Not Cache URIs”, you can add specific paths if needed
 3. The plugin sets proper cache bypass constants

#### Cloudflare Configuration

If using Cloudflare:

 1. Go to Cloudflare Dashboard > **Rules** > **Page Rules**
 2. Add a rule: `yoursite.com/*`
 3. Set “Cache Level” to “Bypass” (optional, only if experiencing issues)
 4. Or add IP-based rules in Cloudflare’s Firewall

#### Testing After Configuration

**Always test blocking functionality:**

 1. Connect to a VPN from a blocked country
 2. Try to access your website
 3. You should see the “Access Restricted” page
 4. Check **Block Logs** in the plugin to confirm the block was logged
 5. If you can still access, clear your cache plugin cache and test again

### Usage

#### Blocking Countries

 1. Go to **Country Blocker** in WordPress admin
 2. Use the search box to quickly find countries
 3. Check/uncheck countries to block/unblock
 4. Click **Save Changes**
 5. Use “Select All” or “Deselect All” for bulk operations

#### Quick Remove Blocked Countries

 1. View the “Currently Blocked Countries” section at the top
 2. Click the **×** button next to any country to remove it instantly
 3. Confirm the removal in the popup

#### Viewing Block Logs

 1. Go to **Country Blocker** > **Block Logs**
 2. See statistics: Total Blocks, Unique IPs, Countries Blocked, Last 7 Days
 3. Filter logs by country, sort by date/IP/country
 4. View detailed information: IP address, country, access type (frontend/backend),
    URL, timestamp
 5. Use pagination to navigate through logs

#### Clearing Logs

Click **Clear All Logs** button to remove all historical block records. This cannot
be undone.

### External Services

This plugin relies on third-party GeoIP services to determine visitor location based
on their IP address. These services are essential for the plugin’s core functionality.

#### ipwho.is (Primary Service — default)

**What it does:** Provides IP geolocation data to identify the visitor’s country.

**When data is sent:** Every time a new visitor accesses your website from an IP
address not cached in the last hour. The plugin sends the visitor’s IP address to
ipwho.is API.

**Data transmitted:** Only the visitor’s IP address is sent to the API. No personal
information, cookies, or user data is transmitted.

**Caching:** Results are cached for 1 hour per IP address to minimize API calls 
and improve performance.

**Service provider:** ipwho.is is a free IP geolocation service.

**Website:** https://ipwho.is/

**API Documentation:** https://ipwho.is/

**Terms of Service:** https://ipwho.is/ (see website footer for terms)

**Privacy Policy:** https://ipwho.is/ (see website footer for privacy policy)

#### findip.net (Optional Alternative Service)

**What it does:** An alternative IP geolocation service you can use instead of ipwho.
is. Requires a free API key.

**When data is sent:** When configured as the primary service, the visitor’s IP 
address is sent to findip.net on each uncached lookup.

**Data transmitted:** Only the visitor’s IP address is sent to the API. No personal
information, cookies, or user data is transmitted.

**Service provider:** findip.net is an IP geolocation service using GeoNames / MaxMind
data.

**API key:** A free account and API token are required. Sign up at https://findip.
net/ and enter the token in Country Blocker > API Settings.

**Website:** https://findip.net/

**API Documentation:** https://findip.net/

**Terms of Service:** https://findip.net/ (see website for current terms of service)

**Privacy Policy:** https://findip.net/ (see website for privacy policy information)

**Note:** By using findip.net, you agree to their terms of service and privacy policy
as outlined on their website.

#### ipapi.co (Fallback Service)

**What it does:** Acts as a backup geolocation service if the primary service (ipwho.
is or findip.net) fails or is unavailable.

**When data is sent:** Only when the primary service fails to respond or returns
an error. The plugin automatically tries ipapi.co as a fallback.

**Data transmitted:** Only the visitor’s IP address is sent to the API. No personal
information, cookies, or user data is transmitted.

**Service provider:** ipapi.co is a free IP geolocation service with rate limits(
30,000 requests/month for free tier).

**Terms of Service:** https://ipapi.co/terms/

**Privacy Policy:** https://ipapi.co/privacy/

**API Documentation:** https://ipapi.co/api/

#### Data Protection & Privacy

 * The plugin does NOT send any personal user data, cookies, form inputs, or browsing
   history to external services.
 * Only IP addresses are transmitted, which are necessary for geolocation functionality.
 * API requests are made server-side; visitor browsers do not directly contact these
   services.
 * Failed API lookups are logged locally for troubleshooting purposes.
 * All API requests use HTTPS (SSL) encryption.

#### Legal Compliance

If you operate in regions with strict privacy laws (GDPR, CCPA, etc.), please be
aware:
 – IP addresses may be considered personal data under some regulations. –
Consider adding a privacy notice informing users that their IP addresses may be 
processed for access control. – The plugin logs blocked access attempts (IP + country
+ timestamp) in your WordPress database for security purposes.

### Technical Details

#### Database Table

The plugin creates `wp_country_blocker_logs` table with the following structure:
–
id (Primary Key) – ip_address (VARCHAR 45) – country_code (VARCHAR 2) – country_name(
VARCHAR 100) – blocked_url (TEXT) – user_agent (TEXT) – access_type (VARCHAR 20)–‘
frontend’ or ‘backend’ – blocked_at (DATETIME)

#### Hooks Used

 * `plugins_loaded` (priority -999999) – Early blocking execution
 * `admin_menu` – Register admin pages
 * `admin_notices` – Show cache configuration notice

#### Constants Defined

**Important Note About Unprefixed Constants:**

This plugin defines industry-standard cache bypass constants that are **intentionally
unprefixed** and **cannot be changed**. These constants have been the de-facto standard
in the WordPress caching ecosystem for over 15 years and are recognized by virtually
all caching plugins and CDN services.

**Why these constants MUST remain unprefixed:**

These constants are NOT WordPress core constants. They are industry standards established
by the caching plugin ecosystem. WP Rocket, LiteSpeed Cache, W3 Total Cache, WP 
Super Cache, and dozens of other caching/CDN plugins specifically check for these**
exact** constant names.

Prefixing these constants (e.g., changing `DONOTCACHEPAGE` to `WPCB_DONOTCACHEPAGE`)
would **break compatibility** with all major caching plugins, rendering the blocking
functionality useless on cached sites.

**Constants used for cache bypass (when blocking visitors):**

 * `DONOTCACHEPAGE` – Prevents page caching (WP Rocket, LiteSpeed Cache, W3 Total
   Cache, WP Super Cache)
 * `DONOTCACHEDB` – Prevents database query caching (W3 Total Cache)
 * `DONOTMINIFY` – Prevents JS/CSS minification (Autoptimize, WP Rocket, Fast Velocity
   Minify)
 * `DONOTCDN` – Prevents CDN URL rewriting (CDN Enabler, W3 Total Cache CDN module)
 * `DONOTCACHEOBJECT` – Prevents object caching (LiteSpeed Cache, W3 Total Cache)

These constants are set ONLY when a visitor is being blocked (403 response), not
globally. They signal to caching plugins: “Do not cache this specific request.”

**References:**
 – WP Rocket Documentation: https://docs.wp-rocket.me/article/61-
disable-page-caching – LiteSpeed Cache Documentation: https://docs.litespeedtech.
com/lscache/lscwp/cache/#do-not-cache-constants

This is an **accepted exception** to WordPress naming conventions and is properly
documented in the code with phpcs ignore comments.

### Support

For support, bug reports, or feature requests, please contact the developer.

### Privacy

This plugin logs IP addresses and country information for security purposes. Ensure
compliance with GDPR/privacy laws in your jurisdiction. Consider adding a privacy
notice to inform users that their IP addresses may be logged if they attempt to 
access from blocked countries.

## Installation

 1. Upload the `smart-country-blocker` folder to the `/wp-content/plugins/` directory
 2. Activate the plugin through the ‘Plugins’ menu in WordPress
 3. **Important:** Deactivate and reactivate the plugin to create the database table
    for logging
 4. Go to **Country Blocker** menu in WordPress admin
 5. Select the countries you want to block using checkboxes
 6. Click **Save Changes**
 7. Test with a VPN from a blocked country to verify it works

## FAQ

### Does this plugin work with caching plugins?

Yes, but you need to configure your cache plugin properly. See the “Cache Plugin
Compatibility” section in the installation guide above. The plugin automatically
sets cache bypass constants, but some cache plugins need manual configuration.

### Will this block both frontend and backend (wp-admin)?

Yes! The plugin blocks:
 – All frontend pages – wp-login.php (login page) – wp-admin
area (dashboard) – Plugin settings pages are whitelisted to prevent admin lockout

### What happens if I accidentally block my own country?

You can still access the Country Blocker settings page to unblock your country. 
The plugin whitelists its own admin pages to prevent complete lockout.

### Does this affect website performance?

The plugin caches country lookup results for 1 hour per IP address using WordPress
transients, so repeated visits from the same IP are very fast. The first lookup 
takes ~100-200ms.

### Can I customize the blocked page?

Yes! Edit the `blocked.php` file in the plugin folder. It uses your site name dynamically
and has a professional Bootstrap-based design.

### Does this work with IPv6?

Yes, the plugin works with both IPv4 and IPv6 addresses.

### What GeoIP service does this use?

The plugin uses two GeoIP services: ipwho.is (primary) and ipapi.co (fallback). 
Both are free services that don’t require API keys for moderate traffic. See the“
External Services” section for complete details on data handling and privacy.

### Can I export the block logs?

Currently, logs are stored in your WordPress database (`wp_country_blocker_logs`
table). You can use phpMyAdmin or a database plugin to export the data as CSV.

### Does this block search engine crawlers?

No, the plugin only checks visitor country based on IP address. Most search engine
crawlers use US IP addresses, so they won’t be blocked unless you block the US.

### Can I whitelist specific IPs?

You can modify the `wpcb_check_and_block()` function to add IP whitelist logic. 
This feature may be added in a future version.

## Reviews

![](https://secure.gravatar.com/avatar/92a19a9178e9c22fe7b4b28855f5fadbe01730d3f9aa5f3ee2f27f91f612ec9f?
s=60&d=retro&r=g)

### 󠀁[Excellent security plugin!](https://wordpress.org/support/topic/excellent-security-plugin-55/)󠁿

 [abubakerm2sys](https://profiles.wordpress.org/abubakerm2sys/) July 23, 2026

Simple, reliable, and does exactly what it promises. Highly recommended for anyone
looking to block malicious traffic by country. Great work by the developer—looking
forward to future updates!

 [ Read all 1 review ](https://wordpress.org/support/plugin/smart-country-blocker/reviews/)

## Contributors & Developers

“Smart Country Blocker” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Shakib R Khan ](https://profiles.wordpress.org/shakibrkhan/)

[Translate “Smart Country Blocker” into your language.](https://translate.wordpress.org/projects/wp-plugins/smart-country-blocker)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/smart-country-blocker/),
check out the [SVN repository](https://plugins.svn.wordpress.org/smart-country-blocker/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/smart-country-blocker/)
by [RSS](https://plugins.trac.wordpress.org/log/smart-country-blocker/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.4 – 2026-07-13

 * Minor version update for WordPress.org submission

#### 1.0.3 – 2026-07-13

 * Fixed: Refactored blocked page CSS to use wp_register_style() and wp_add_inline_style()(
   WordPress compliant)
 * Fixed: Added version parameter to wp_register_style() for proper cache busting
 * Fixed: Updated findip.net Terms/Privacy URLs to point to main website (404 URL
   fix)
 * Enhanced: Blocked page now uses wp_enqueue_style() and wp_print_styles() properly
 * Compliance: All WordPress Plugin Review CSS enqueue requirements met

#### 1.0.2 – 2026-07-09

 * Fixed: Added proper phpcs ignore comments for Plugin Check tool validation
 * Enhanced: Improved input validation documentation for security scanner
 * Security: Added comprehensive security hardening with capability checks
 * Security: Implemented HTTP security headers (X-Frame-Options, X-XSS-Protection,
   etc.)
 * Security: Added API rate limiting (500 requests/hour) to prevent abuse
 * Security: Enhanced private network detection (RFC1918 ranges)
 * Compliance: All WordPress Plugin Check warnings resolved

#### 1.0.1 – 2026-07-09

 * Fixed: Converted blocked.php to use inline styles (WordPress compliant for error
   pages)
 * Fixed: Added comprehensive external services documentation with Terms of Service
   and Privacy Policy links
 * Enhanced: Added extensive documentation for industry-standard cache bypass constants
 * Removed: Unused blocked.css file (now using inline styles)
 * Compliance: All WordPress Plugin Review issues addressed and resolved

#### 1.0.0 – 2024-03-24

 * Initial release
 * Complete list of 195+ countries
 * Frontend and backend (wp-admin, wp-login.php) blocking
 * Comprehensive logging system with database table
 * Statistics dashboard (Total Blocks, Unique IPs, etc.)
 * Advanced filtering and sorting (by country, date, IP)
 * Pagination for logs (20 records per page)
 * Quick remove buttons for blocked countries
 * Search functionality for country selection
 * Cache plugin compatibility (WP Rocket, W3 Total Cache, etc.)
 * IP geolocation caching (1 hour) for performance
 * No-cache headers for blocked pages
 * Custom blocked page with Bootstrap design
 * WordPress nonce security for all forms
 * Localhost bypass for development

## Meta

 *  Version **1.0.4**
 *  Last updated **3 weeks ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.3**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/smart-country-blocker/)
 * Tags
 * [country block](https://vec.wordpress.org/plugins/tags/country-block/)[geo blocking](https://vec.wordpress.org/plugins/tags/geo-blocking/)
   [GeoIP](https://vec.wordpress.org/plugins/tags/geoip/)[IP-blocking](https://vec.wordpress.org/plugins/tags/ip-blocking/)
   [security](https://vec.wordpress.org/plugins/tags/security/)
 *  [Advanced View](https://vec.wordpress.org/plugins/smart-country-blocker/advanced/)

## Ratings

 5 out of 5 stars.

 *  [  1 5-star review     ](https://wordpress.org/support/plugin/smart-country-blocker/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/smart-country-blocker/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/smart-country-blocker/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/smart-country-blocker/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/smart-country-blocker/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/smart-country-blocker/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/smart-country-blocker/reviews/)

## Contributors

 *   [ Shakib R Khan ](https://profiles.wordpress.org/shakibrkhan/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/smart-country-blocker/)