• Hello,

    I need to block certain city to access my website, plugin is working fine detecting the city but I need to block one of my country city to access me website. How can I do it ? thanks !

Viewing 8 replies - 1 through 8 (of 8 total)
  • Plugin Author Benjamin Pick

    (@benjamin4)

    For blocking countries, I would use a different plugin (e.g. https://www.ads-software.com/plugins/iq-block-country/).

    Blocking cities – this sounds quite risky, as the accuracy on the city level is between 10-90%, depending on the country:

    https://www.maxmind.com/en/geoip2-city-accuracy-comparison?country=&resolution=city&cellular=all

    You can adapt this code and put it in your theme’s function.php or so:

    https://github.com/yellowtree/geoip-detect/wiki/API-Usage-Examples#allowing-access-only-from-a-certain-country

    eddypiv

    (@eddypiv)

    Hi, I need exactly the same.

    So I purchased and installed the MaxMind City database, and added the following to the function.php of my theme:

    add_action(‘plugins_loaded’, function() {
    if (!function_exists(‘geoip_detect2_get_info_from_current_ip’)) {
    return;
    }
    if ( is_admin() || is_user_logged_in() ) { // No restrictions for WordPress admin
    return;
    }

    $userInfo = geoip_detect2_get_info_from_current_ip();
    if ($userInfo->city->name == ‘my_city’) {
    wp_die(‘This website is not available in this city.’);
    }
    });

    I copied the city info from the Geolocation Lookup Result.
    But I still can see the website when entering as guest / not logged in.
    I changed to ($userInfo->city->name != ‘my_city’), I still can reach the website.

    So there must be something wrong with the code above. Can you please help?

    Plugin Author Benjamin Pick

    (@benjamin4)

    Looks pretty good. Are you sure the right city is detected? You can add a shortcode to show the city he finds.
    Also I would use the Id instead of the city name to compare in order to make sure you don’t block another city by the same name by accident:

    $userInfo->city->geonameId

    eddypiv

    (@eddypiv)

    First of all: how do I know the geonameId of a city that I want to block? The lookups are based on IP-addresses.

    In my ‘case’ I raised 2 opposite scenario’s: == ‘my_city’ and != ‘my_city’
    At least one of these cases must be true, but for both I could visit the website while not logged in. I cleared browser and page cache after each change.

    So I’m afraid something is wrong with my code.

    Your help is much appreciated.

    Hi Benjamin, any news on my questions?

    Plugin Author Benjamin Pick

    (@benjamin4)

    Well then probably your code isn’t executed … I can’t help you debugging your PHP code, sorry …

    Hang on, let me understand this correctly.

    You advocate that with your plugin and the GEO Location file one can block for a specific country or even city, and you give an example of how to do that for a country.
    But when I follow your example, adapt it to the city (you: Looks pretty good) and it appears not to work, you simply withdraw??

    I am demonstrating that in either case it doesn’t work: being in the city or outside the city.

    As your example contains a mixture of php and html but without any <?php control, I have added it, as follows: https://share.getcloudapp.com/mXu5m1RK

    It should also be in your own interest to make sure your example is correct. I’m happy to help, but are you?

    Plugin Author Benjamin Pick

    (@benjamin4)

    Dear @eddypiv

    I am giving free support here, and the plugin is mainly geared to plugin developers who know PHP, WordPress etc. So all support here is best-effort (if and when I find the time for it) and completely voluntary on my side. Using an unpolite tone of voice will only lessen my motivation to help you.

    Try putting a wp_die(‘test’); statement somewhere into your code and see, which lines are executed or not executed. Then, put it somewhere else and repeat, until you know what exactly does not work. (There are other, more convenient methods of debugging PHP code but this is a method that can be used at all servers.)

    I have tried my example and it works on my test installation. That’s why I said, I can’t help you debug this from a distance.

Viewing 8 replies - 1 through 8 (of 8 total)
  • The topic ‘How to block city to access my website ?’ is closed to new replies.