可以直接修改源代码,放在sidebar.php边栏合适的位置里
第三方 API
例如ip-api.com
<?php
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
$api = "http://ip-api.com/json/{$ip}?lang=zh-CN";
$response = wp_remote_get($api);
$data = json_decode(wp_remote_retrieve_body($response), true);
$area = $data['regionName'] . ' ' . $data['city'];
?>
<div class="card-body text-center leftbar-search-button">
<div>
欢迎来自 <?php echo $area; ?> 的朋友<br>
当前 IP:<?php echo $ip; ?>
</div>
</div>本地数据库
下载官方 PHP 库
访问 https://github.com/ip2location/ip2location-php-module ,找到 src 文件夹,下载里面的 Database.php
下载数据库文件
访问 https://lite.ip2location.com 注册免费账号,下载 DB3.LITE 版本的 BIN 文件。DB3 包含国家、省份、城市三个字段,免费版每月更新一次
放置文件
在 WordPress 的主题目录下新建 location 文件夹,例如我的argon主题路径为 /wp-content/themes/argon/location/,将下载的 Database.php 和 IP2LOCATION-LITE-DB3.BIN 放入
编写代码
php添加以下内容。默认地址都是英文,我只想实现到省级的定位,所以把所有省份写进映射表即可
<div class="card-body text-center leftbar-search-button" style="padding: 12px; font-size: 14px; line-height: 1.6;">
<?php
require_once( dirname(__FILE__) . '/location/Database.php' );
$region_map = [
'Beijing' => '北京', 'Shanghai' => '上海', 'Tianjin' => '天津', 'Chongqing' => '重庆',
'Guangdong' => '广东', 'Guangxi' => '广西', 'Hainan' => '海南', 'Fujian' => '福建',
'Zhejiang' => '浙江', 'Jiangsu' => '江苏', 'Shandong' => '山东', 'Liaoning' => '辽宁',
'Hebei' => '河北', 'Henan' => '河南', 'Hubei' => '湖北', 'Hunan' => '湖南',
'Jiangxi' => '江西', 'Shaanxi' => '陕西', 'Shanxi' => '山西', 'Sichuan' => '四川',
'Yunnan' => '云南', 'Guizhou' => '贵州', 'Anhui' => '安徽', 'Gansu' => '甘肃',
'Qinghai' => '青海', 'Heilongjiang' => '黑龙江', 'Jilin' => '吉林', 'Neimenggu' => '内蒙古',
'Ningxia' => '宁夏', 'Xinjiang' => '新疆', 'Xizang' => '西藏', 'Taiwan' => '台湾',
'Hong Kong' => '香港', 'Macau' => '澳门'
];
$bin_file = dirname(__FILE__) . '/location/IP2LOCATION-LITE-DB3.BIN';
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
if (empty($ip) || $ip == '127.0.0.1') {
$area = '地球';
} elseif (!file_exists($bin_file)) {
$area = '数据库未找到';
} else {
$ip2location = new \IP2Location\Database($bin_file, \IP2Location\Database::FILE_IO);
$records = $ip2location->lookup($ip);
$region_en = $records['regionName'] ?? '';
$area = $region_map[$region_en] ?? ($records['countryName'] ?? '未知地区');
}
?>
<div class="card-body text-center leftbar-search-button">
<div>
欢迎来自 <?php echo $area; ?> 的朋友<br>
当前 IP:<?php echo $ip; ?>
</div>
</div>