根据地理位置IP位置显示价格

时间:2016-09-24 作者:FRQ6692

在我的wordpress网站上,我使用自定义字段显示产品的价格,这三个字段都有不同的货币。

我想检测具有IP的用户,然后打印哪个自定义字段具有该国家的本地货币。。

英国IP=价格1

美国IP=价格2

其他IP=价格3

How to print a custom field after detecting user country with IP???

<?php

if($user_country_code=="UK") {
echo get_post_meta( get_the_ID(), \'price1\', true ); 
} 

else if ($user_country_code=="US"){
echo get_post_meta( get_the_ID(), \'price2\', true );
}

else {
echo get_post_meta( get_the_ID(), \'price3\', true ); 
}
?>

1 个回复
最合适的回答,由SO网友:Ahmed Fouad 整理而成

这里有一个简单的方法来实现您正在尝试的目标。

将这些函数放入主题函数中。php或插件文件。

这将允许您通过API请求捕获两个字母的国家/地区代码。您必须远程测试它(如果您在localhost上测试,您将不会得到任何国家/地区代码,因为您的IP读取为127.0.0.1,因此您必须使用真实的IP进行测试)

功能

// This function will retrieve the current user IP
// needed to query the geo country
function _wp_get_ip() {
    $ip = \'127.0.0.1\';

    if ( ! empty( $_SERVER[\'HTTP_CLIENT_IP\'] ) ) {
        //check ip from share internet
        $ip = $_SERVER[\'HTTP_CLIENT_IP\'];
    } elseif ( ! empty( $_SERVER[\'HTTP_X_FORWARDED_FOR\'] ) ) {
        //to check ip is pass from proxy
        $ip = $_SERVER[\'HTTP_X_FORWARDED_FOR\'];
    } elseif( ! empty( $_SERVER[\'REMOTE_ADDR\'] ) ) {
        $ip = $_SERVER[\'REMOTE_ADDR\'];
    }

    $ip_array = explode( \',\', $ip );
    $ip_array = array_map( \'trim\', $ip_array );

    if ( $ip_array[0] == \'::1\' ) {
        $ip_array[0] = \'127.0.0.1\';
    }

    return $ip_array[0];
}

// get the country code XX 
// will return null/empty if any error
function _wp_get_country_code() {

    $response = wp_remote_get( \'http://ipinfo.io/\' . _wp_get_ip() . \'/country\' );
    if ( strlen( $country_code = (string) trim( $response[\'body\'] ) ) == 2 ) {
        return $country_code;   
    }

    return \'\';
}
现在,您可以按如下方式运行条件价格输出:

$country_code = _wp_get_country_code();

if ( $country_code == \'US\' ) {

} else if ( $country_code == \'UK\' ) {

} else {

    // etc...

}
请注意,如果您实施缓存,这可以进一步改进,并提高效率。但这对于这里要问的问题来说有点先进。我只是让你知道,如果你有很多用户,这不是最好的方式。