GeoIP Detection


Provides geographic information detected by an IP adress. This can be used in themes or other plugins,
as a shortcode, or via CSS body classes. The city & country names are translated in different languages (supported languages).


  • Provides these 5 functions (see API Documentation):
    • geoip_detect2_get_info_from_ip($ip, $locales = array('en'), $options = array()): Lookup Geo-Information of the specified IP
    • geoip_detect2_get_info_from_current_ip($locales = array('en'), $options = array()): Lookup Geo-Information of the current website user
    • geoip_detect2_get_current_source_description(...): Return a human-readable label of the currently chosen source.
    • geoip_detect2_get_external_ip_adress(): Fetch the internet adress of the webserver
    • geoip_detect2_get_client_ip(): Get client IP (even if it is behind a reverse proxy)
  • You can use one of these data sources (see comparison):
  • For the property names, see the results of a specific IP in the wordpress backend (under Tools > GeoIP Detection).
  • You can include these properties into your posts and pages by using the shortcode [geoip_detect2 property="" default="(country could not be detected)" lang="en"] (where ‘’ can be one of the other property names as well, and ‘default’ and ‘lang’ are optional).
  • You can show or hide content by using a shortcode [geoip_detect2_show_if country="FR, DE" not_city="Berlin"]TEXT[/geoip_detect2_show_if]. See Shortcode Documentation.
  • When enabled on the options page, it adds CSS classes to the body tag such as geoip-province-HE, geoip-country-DE and geoip-continent-EU.
  • When enabled on the options page, the client IP respects a reverse proxy of the server.
  • If you are using Contact Form 7, you can use these shortcodes:
    • A select input with all countries, the detected country being selected by default: [geoip_detect2_countries mycountry]
    • A text input that is pre-filled with the detected city (or other property): [geoip_detect2_text_input city property:city lang:fr id:id class:class default:Paris]
    • GeoIP information for the email text: [geoip_detect2_user_info]

See Documentation for more info.

How can I use these functions?

  • You could choose the currency of the store based on the country name
  • You could suggest an timezone to use when displaying dates
  • You could show the store nearest to your customer
  • You show or hide content specific to a geographic target group
  • Etc. … You tell me! I’m rather curious what you’ll do with this plugin!
  • Be careful to comply to the applicable laws. For example Regulation (EU) 2018/302 (going into effect 03 Dec 2018)…

System Requirements: You will need at least PHP 5.4.

GDPR: See Is this plugin GDPR-compliant?

This extension is “charity-ware”. If you are happy with it, please leave a tip for the benefit of this charity. (See FAQ for more infos.)

This product can provide GeoLite2 data created by MaxMind, available from


Does geoip_detect2_get_info_from_current_ip() return the same country, regardless of where you are visiting the site from? Maybe your server has a reverse proxy configured. You can check this: Go to the options page and look for “reverse proxy”. Are there 2 IPs listed there? If so, which one corresponds to your public IP?


  • Lookup page (under Tools > GeoIP Lookup)
  • Options page (under Preferences > GeoIP Detection)


  • Install the plugin
  • Go to the plugin’s option page and choose a data source.
  • Test it by clicking on “Lookup” on the lookup page.


2019 年 10 月 3 日
This plugin is so easy to use. If you know how to use shortcodes, it'll be a snap for you. My kudos to the dev team.
閱讀全部 40 則使用者評論


以下人員參與了開源軟體〈GeoIP Detection〉的開發相關工作。


GeoIP Detection 外掛目前已有 1 個本地化語言版本。 感謝全部譯者為這個外掛做出的貢獻。

將 GeoIP Detection 外掛本地化為台灣繁體中文版


任何人均可瀏覽程式碼、查看 SVN 存放庫,或透過 RSS 訂閱開發記錄



  • NEW: JS/AJAX mode now caches the response as a cookie so that every user only needs to call the AJAX requests once
  • NEW: If you install the plugin SVG Flags, you can use this shortcode to show the flag of the current country: [geoip_detect2_current_flag]. See Documentation for more infos.
  • FIX: Example PHP code on Lookup page now displays nicer array syntax (and fixing a deprecation warning)
  • Updated Maxmind vendor code – PHP 5.6 is required now


  • NEW: With the new WordPress filter geoip_detect2_record_data_after_cache you can change the record data for testing purposes (see
  • NEW: All datasources now also have the properties extra->flag (containing the flag as Unicode Emoji) and extra->tel (containing the country dial code)
  • Some cleanup in ipstack & showing all properties in backend.


  • NEW: It is now possible to use as a data source.
  • The Backend Lookup UI now can show all properties and you can choose if you want to see the PHP, Shortcode or JS syntax.


  • The auto-updater of the Maxmind City Lite source now updates more often (every 1-2weeks) in order to get more accurate data.


  • FIX: When activating the plugin on WordPress MultiSite, an error was thrown before
  • NEW: Add body class “geoip-country-is-in-european-union” if the detected country is inside of the European Union
  • JS/AJAX support for cached pages (Public BETA now. See
  • NEW: If AJAX and body classes are enabled, body classes are added via AJAX.


  • NEW: JS/AJAX support for cached pages (This is in BETA. Read on how to activate it)
  • FIX: Improve performance of unpacking the Maxmind file (Source: Automatic download) – important for hosts with a low max_execution_time
  • NEW: On removal (in the Backend), the plugin will delete its options from the database and the downloaded Maxmind file


  • NEW: The whitelisted proxies can now be subnets such as
  • NEW: Add a ContactForm7-Tag geoip_detect2_text_input (see
  • NEW: A new wordpress filter allows overriding of the detected geo-information inside the geoip_detect2_shortcode_show_if-Shortcode. Use the already-existing filter geoip_detect2_record_information instead if you want to override this information for all shortcodes and API calls.
  • Updated Maxmind vendor code
  • Increased WP minimum version to 4.0


  • FIX: ContactForm7-Mailtag disabled mailtags from other plugins.


  • NEW: Add ContactForm7-Mailtags so that the user information formatting can be customized: geoip_detect2_get_client_ip, geoip_detect2_get_current_source_description, geoip_detect2_property_country, geoip_detect2_property_state, geoip_detect2_property_city. Of course you can still use geoip_detect2_user_info as shortcode for all these informations.
  • FIX: On some server, the plugin had wrongly assumed that PHP was compiled without IPv6-support.


  • Add default Privacy text for GDPR compliance.
  • The reverse proxy logic was heavily changed. If you run into configuration errors, try the debug panel (see link after the reverse proxy option).
  • NEW: Reverse proxies can now be whitelisted – all non-whitelisted proxies are treated as user IP.
  • NEW: Shortcode to show/hide content dynamically. ([geoip_detect2_show_if country="US" not_state="Texas"]TEXT[/geoip_detect2_show_if]) (Thanks to @DynAggelos!)
  • NEW: All shortcodes now support multiple subdivisions ([geoip_detect2 property="subdivisions.0.isoCode"])
  • NEW: The CSS classes that are added to the body-tag (if enabled in the options) now also include the most specific subdivision (geoip-province-HE).
  • Maxmind vendor code was updated to the current version (2.9.0).

Older changelog