WordPress的地理定位非常简单

时间:2018-03-05 23:08:47

标签: php json wordpress geolocation

我需要为WordPress网站做一些非常基本的地理定位。

类似的东西:

<?php if ( visitor is from usa ): ?>
<?php get_footer('us'); ?>
<?php else: ?>
<?php get_footer('other-countries'); ?>
<?php endif; ?>

直到现在我使用了ip-api.com提供的GEO服务。 我的代码如下所示:

<?php $ip = $_SERVER['REMOTE_ADDR'];
$query = @unserialize(file_get_contents('http://ip-api.com/php/' . $ip));
$geo = $query['countryCode'];
if( $query['countryCode'] == 'US') : ?>
                    DO THIS
<?php else: ?>
                    DO THAT
<?php endif ?>  

问题是php unserialize现在已被弃用并且非常慢。相反,Ip-api suggest to use JSON。但我是一个新手,我不知道如何用JSON实现相同的结果。有人可以帮助我吗?

我知道那里有各种各样的插件,但我认为它们对于我需要的非常简单的地理定位来说太过分了。

PS:我只是learn我应该使用代码

$.getJSON( '//ip-api.com/json?callback=?', function( data ) {
console.log( JSON.stringify( data, null, 2 ) );
});

但我仍然需要帮助才能将最终的完整代码放在一起。

1 个答案:

答案 0 :(得分:1)

试试这个:

<?php
$ip = ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) ?
    $_SERVER['REMOTE_ADDR'] : '';

$country_code = '';
if ( $ip ) {
    // 'fields' are comma-separated list of fields to include in the response.
    // No spaces between the fields. See http://ip-api.com/docs/api:returned_values#field_generator
    $url = 'http://ip-api.com/json/' . $ip . '?fields=countryCode,status,message';

    $res_body = wp_remote_retrieve_body( wp_safe_remote_get( $url ) );
    $geo = json_decode( $res_body );

    $country_code = isset( $geo->countryCode ) ? $geo->countryCode : '';
}

if ( 'US' === $country_code ) : ?>
    DO THE THIS
<?php else : ?>
    DO THE THAT
<?php endif; ?>
  

PS:我刚刚知道我应该使用代码

是的,that是使用jQuery进行此操作的一个示例。