wordpress显示评论者地理位置与浏览器类型
wordpress评论不具体记录评论者的地理位置与浏览器类型,这个功能我们需要进入二次开发或使用插件,下面我介绍的不使用插件,是直接使用源码操作,具体例子如下.
显示评论者地理位置
将以下函数放到你的functions.php 中,实现的原理是利用新浪和淘宝的IP查询接口,返回IP所属城市,小修了下代码,去掉了挂载点,直接在显示评论时调用函数,代码如下:
/** * 使用api获取<a title="查看与城市有关的文章" 城市名 * @param string $ip * @return string|mixed */ function wpgo_get_city( $ip = null) { $ip = $ip == null ? wpgo_get_ip() : $ip ; $ipApi = array ( 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=' , 'http://ip.taobao.com/service/getIpInfo.php?ip=' ); foreach ( $ipApi as $k => $api ) { $res = wp_remote_get ( $api . $ip ); if ( is_object ( $res ) && $k == 0 ) { continue ; } if (! empty empty ( $res [ 'body' ] )) { $return = json_decode ( $res [ 'body' ], true ); if (! empty empty ( $return [ 'city' ] )) { return $return [ 'city' ]; } elseif ( $return [ 'province' ] == '香港' || $return [ 'province' ] == '澳门' ) { return $return [ 'province' ]; } else { return $return [ 'country' ]; } } } return false; } /** * 获取当前用户ip * @return string */ function wpgo_get_ip() { if ( getenv ( "HTTP_CLIENT_IP" ) && strcasecmp ( getenv ( "HTTP_CLIENT_IP" ), "unknown" ) ) { $ip = getenv ( "HTTP_CLIENT_IP" ); } elseif ( getenv ( "HTTP_X_FORWARDED_FOR" ) && strcasecmp ( getenv ( "HTTP_X_FORWARDED_FOR" ), "unknown" )) { $ip = getenv ( "HTTP_X_FORWARDED_FOR" ); } elseif ( getenv ( "REMOTE_ADDR" ) && strcasecmp ( getenv ( "REMOTE_ADDR" ), "unknown" )) { $ip = getenv ( "REMOTE_ADDR" ); } elseif (isset ( $_SERVER [ 'REMOTE_ADDR' ] ) && $_SERVER [ 'REMOTE_ADDR' ] && strcasecmp ( $_SERVER [ 'REMOTE_ADDR' ], "unknown" )) { $ip = $_SERVER [ 'REMOTE_ADDR' ]; } if ( $_SERVER [ 'REMOTE_ADDR' ] == '127.0.0.1' && $ip == 'unknown' ) { $ip = 'localhost' ; } return $ip ; }最重要的一段:最后在你的模板输出评论之前,获取城市字段,下面是引用我模板里的代码,你只能参考判断方式,具体怎么修改得根据你的模板来修改,代码如下:
// 如果是管理员回复 if ( $is_admin ) { $city = '来自管理员的回复' ; } else { // 兼容以前还没有城市字段的评论 $city = get_comment_meta( $comment ->comment_ID, 'city_name' , true ); if ( ! $city ) { $city = wpgo_get_city ( $comment ->comment_author_IP ); // 如果api可以正常获取到城市信息,则插入数据库 if ( $city ) { update_comment_meta( $comment ->comment_ID, 'city_name' , $city ); } else { // 如果因为异常获取不到api的信息,返回自定义字符串,留着下次读取评论时再重新获取 $city = '火星' ; } } $city = "来自{$city}的网友" ; }显示评论者浏览器类型, 将下面代码放入function.php中,代码如下:
function getbrowser( $Agent ) { if ( $Agent == "" ) $Agent = $_SERVER [ 'HTTP_USER_AGENT' ]; $browser = '' ; $browserver = '' ; if ( ereg ( 'Mozilla' , $Agent ) && ereg ( 'Chrome' , $Agent )) { $temp = explode ( '(' , $Agent ); $Part = $temp [2]; $temp = explode ( '/' , $Part ); $browserver = $temp [1]; $temp = explode ( ' ' , $browserver ); $browserver = $temp [0]; $browser = 'Chrome' ; } if ( ereg ( 'Mozilla' , $Agent ) && ereg ( 'Firefox' , $Agent )) { $temp = explode ( '(' , $Agent ); $Part = $temp [1]; $temp = explode ( '/' , $Part ); $browserver = $temp [2]; $temp = explode ( ' ' , $browserver ); $browserver = $temp [0]; $browser = 'Firefox' ; } if ( ereg ( 'Mozilla' , $Agent ) && ereg ( 'Opera' , $Agent )) { $temp = explode ( '(' , $Agent ); $Part = $temp [1]; $temp = explode ( ')' , $Part ); $browserver = $temp [1]; $temp = explode ( ' ' , $browserver ); $browserver = $temp [2]; $browser = 'Opera' ; } if ( ereg ( 'Mozilla' , $Agent ) && ereg ( 'UCBrowser' , $Agent )) { $temp = strrchr ( $Agent , '/' ); $browserver = substr ( $temp ,1); $browser = 'UC' ; } if ( ereg ( 'Mozilla' , $Agent ) && ereg ( 'MSIE' , $Agent )) { $temp = explode ( '(' , $Agent ); $Part = $temp [1]; $temp = explode ( ';' , $Part ); $Part = $temp [1]; $temp = explode ( ' ' , $Part ); $browserver = $temp [2]; $browser = 'Internet Explorer' ; } //其余浏览器按需自己增加 if ( $browser != '' ) { $browseinfo = $browser . ' ' . $browserver ; } else { $browseinfo = $Agent ; } return $browseinfo ; }上面的getbrowser()函数返回的是浏览器名字+浏览器版本,在相关位置调用,让其显示出来即可,最后打开wordpress下的wp-includes/comment-template,查找function get_comment_author_link函数,在最后一个return之前加入调用函数,以及显示对应小图标功能,代码如下:
if ( $comment ) $ua = $comment ->comment_agent; else $ua = "" ; $tmp = getbrowser( $ua ); if ( $tmp != "" ) { $br = explode ( ' ' , $tmp ); if ( stristr ( $br [0], 'chrome' )) $brimg = "/chrome.png" ; elseif ( stristr ( $br [0], 'firefox' )) $brimg = "/firefox.png" ; elseif ( stristr ( $br [0], 'opera' )) $brimg = "/opera.png" ; elseif ( stristr ( $br [0], 'internet' )) $brimg = "/ie.png" ; elseif ( stristr ( $br [0], 'Safari' )) $brimg = "/Safari.png" ; elseif ( stristr ( $br [0], 'UC' )) $brimg = "/ucweb.png" ; else $brimg = "/anonymouse.png" ; $return .= " <img src='" . $brimg . "' title='" .getbrowser( $ua ). "' />" ; }到这里,大功告成,剩下的有时间的话,再把其他浏览器补全了,目前只支持chrome,ie,firefox,opera等简单的识别.
查看更多关于wordpress显示评论者地理位置与浏览器类型 - Word的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did8968