折腾博客就是一个反复跳坑、填坑的过程,累却乐在其中。在上篇的《分享三个可用的IP查询API》虽然解决了IP归属地查询的问题,可很快发现了另一个问题:大部分的IP都是相同的,且相对固定。
想到最近启用了百度匀加速的cdn,就在匀加速的支持文件中查找了节点的ip地址,果不其然,评论者的IP全部来自百度匀加速的节点。这样一来就算显示评论者IP归属地还有什么意义呢?先看看wp文档有没有评论者IP相关的filter。或许是老天眷顾,很快发现一个可以filter:pre_comment_user_ip。
该函数用来对即将写入数据库的评论者IP进行处理,用官方的话说就是“Standard behaviour of wordpress is to record the IP address of somebody commenting by the server variable”。
add_filter('pre_comment_user_ip','get_real_comment_ip');
function get_real_comment_ip($comment_user_ip){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else
if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else
if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else
if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return $ip;
}
将上述代码粘贴纸主题function文件即可。
经过测试,IP显示恢复正常。