我需要为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 ) );
});
但是我仍然需要帮助来整理最终的完整代码。
试试这个:
<?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做的一个例子。