网站地图    收藏   

主页 > 后端 > wordpress教程 >

wordpress显示评论者地理位置与浏览器类型 - Word

来源:自学PHP网    时间:2014-11-28 23:41 作者: 阅读:

[导读] wordpress评论不具体记录评论者的地理位置与浏览器类型,这个功能我们需要进入二次开发或使用插件,下面我介绍的不使用插件,是直接使用源码操作,具体例子如下 显示评论者地理位置将以...

wordpress显示评论者地理位置与浏览器类型

wordpress评论不具体记录评论者的地理位置与浏览器类型,这个功能我们需要进入二次开发或使用插件,下面我介绍的不使用插件,是直接使用源码操作,具体例子如下.

显示评论者地理位置

将以下函数放到你的functions.php 中,实现的原理是利用新浪和淘宝的IP查询接口,返回IP所属城市,小修了下代码,去掉了挂载点,直接在显示评论时调用函数,代码如下:

  1. /** 
  2.  * 使用api获取<a title="查看与城市有关的文章" 城市名 
  3.  * @param string $ip 
  4.  * @return string|mixed 
  5.  */ 
  6. function wpgo_get_city($ip = null) { 
  7.     $ip = $ip == null ? wpgo_get_ip() : $ip
  8.     $ipApi = array ( 
  9.             'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='
  10.             'http://ip.taobao.com/service/getIpInfo.php?ip=' 
  11.     ); 
  12.  
  13.     foreach ( $ipApi as $k=> $api ) { 
  14.         $res = wp_remote_get ( $api . $ip ); 
  15.         if ( is_object ( $res ) && $k == 0 ) { 
  16.             continue
  17.         } 
  18.         if (! emptyempty ( $res ['body'] )) { 
  19.             $return = json_decode ( $res ['body'], true ); 
  20.             if (! emptyempty ( $return ['city'] )) { 
  21.                 return $return ['city']; 
  22.             } elseif$return ['province'] == '香港' || $return ['province'] == '澳门') { 
  23.                 return $return ['province']; 
  24.             } else { 
  25.                 return $return ['country']; 
  26.             } 
  27.         } 
  28.     } 
  29.     return false; 
  30.  
  31. /** 
  32.  * 获取当前用户ip 
  33.  * @return string 
  34.  */ 
  35. function wpgo_get_ip() { 
  36.     if ( getenv ( "HTTP_CLIENT_IP" ) && strcasecmp ( getenv ( "HTTP_CLIENT_IP" ), "unknown" ) ) { 
  37.         $ip = getenv ( "HTTP_CLIENT_IP" ); 
  38.     } elseif (getenv ( "HTTP_X_FORWARDED_FOR" ) && strcasecmp ( getenv ( "HTTP_X_FORWARDED_FOR" ), "unknown" )) { 
  39.         $ip = getenv ( "HTTP_X_FORWARDED_FOR" ); 
  40.     } elseif (getenv ( "REMOTE_ADDR" ) && strcasecmp ( getenv ( "REMOTE_ADDR" ), "unknown" )) { 
  41.         $ip = getenv ( "REMOTE_ADDR" ); 
  42.     } elseif (isset ( $_SERVER ['REMOTE_ADDR'] ) && $_SERVER ['REMOTE_ADDR'] && strcasecmp ( $_SERVER ['REMOTE_ADDR'], "unknown" )) { 
  43.         $ip = $_SERVER ['REMOTE_ADDR']; 
  44.     } 
  45.     if ($_SERVER ['REMOTE_ADDR'] == '127.0.0.1' && $ip == 'unknown') { 
  46.         $ip = 'localhost'
  47.     } 
  48.     return $ip

最重要的一段:最后在你的模板输出评论之前,获取城市字段,下面是引用我模板里的代码,你只能参考判断方式,具体怎么修改得根据你的模板来修改,代码如下:

  1. // 如果是管理员回复 
  2. if ( $is_admin ) { 
  3.     $city = '来自管理员的回复'
  4. else { 
  5.     // 兼容以前还没有城市字段的评论 
  6.     $city = get_comment_meta( $comment->comment_ID, 'city_name', true ); 
  7.     if( !$city ) { 
  8.         $city = wpgo_get_city ( $comment->comment_author_IP ); 
  9.         // 如果api可以正常获取到城市信息,则插入数据库 
  10.         if ( $city ) { 
  11.             update_comment_meta( $comment->comment_ID, 'city_name'$city ); 
  12.         } else { 
  13.         // 如果因为异常获取不到api的信息,返回自定义字符串,留着下次读取评论时再重新获取 
  14.             $city = '火星'
  15.         } 
  16.     } 
  17.     $city = "来自{$city}的网友"

显示评论者浏览器类型,将下面代码放入function.php中,代码如下:

  1. function getbrowser($Agent
  2.     { 
  3.         if ($Agent == ""
  4.   $Agent = $_SERVER['HTTP_USER_AGENT']; 
  5.         $browser = ''
  6.         $browserver = ''
  7.         if(ereg('Mozilla'$Agent) && ereg('Chrome'$Agent)) 
  8.         { 
  9.             $temp = explode('('$Agent); 
  10.             $Part = $temp[2]; 
  11.             $temp = explode('/'$Part); 
  12.             $browserver = $temp[1]; 
  13.             $temp = explode(' '$browserver); 
  14.             $browserver = $temp[0]; 
  15.             $browser = 'Chrome'
  16.         } 
  17.  if(ereg('Mozilla'$Agent) && ereg('Firefox'$Agent)) 
  18.         { 
  19.             $temp = explode('('$Agent); 
  20.             $Part = $temp[1]; 
  21.             $temp = explode('/'$Part); 
  22.             $browserver = $temp[2]; 
  23.             $temp = explode(' '$browserver); 
  24.             $browserver = $temp[0]; 
  25.            $browser = 'Firefox'
  26.         } 
  27.         if(ereg('Mozilla'$Agent) && ereg('Opera'$Agent))  
  28.         { 
  29.             $temp = explode('('$Agent); 
  30.             $Part = $temp[1]; 
  31.             $temp = explode(')'$Part); 
  32.             $browserver = $temp[1]; 
  33.             $temp = explode(' '$browserver); 
  34.             $browserver = $temp[2]; 
  35.             $browser = 'Opera'
  36.         } 
  37.  if(ereg('Mozilla'$Agent) && ereg('UCBrowser'$Agent))  
  38.         { 
  39.             $temp = strrchr($Agent,'/'); 
  40.             $browserver = substr($temp,1); 
  41.             $browser = 'UC'
  42.         } 
  43.         if(ereg('Mozilla'$Agent) && ereg('MSIE'$Agent)) 
  44.         { 
  45.             $temp = explode('('$Agent); 
  46.             $Part = $temp[1]; 
  47.             $temp = explode(';'$Part); 
  48.             $Part = $temp[1]; 
  49.             $temp = explode(' '$Part); 
  50.             $browserver = $temp[2]; 
  51.             $browser = 'Internet Explorer'
  52.         } 
  53.         //其余浏览器按需自己增加 
  54.         if($browser != ''
  55.         { 
  56.             $browseinfo = $browser.' '.$browserver
  57.         }  
  58.         else 
  59.         { 
  60.             $browseinfo = $Agent
  61.         } 
  62.    
  63.         return $browseinfo
  64.     } 

上面的getbrowser()函数返回的是浏览器名字+浏览器版本,在相关位置调用,让其显示出来即可,最后打开wordpress下的wp-includes/comment-template,查找function get_comment_author_link函数,在最后一个return之前加入调用函数,以及显示对应小图标功能,代码如下:

  1. if($comment
  2.  $ua = $comment->comment_agent; 
  3. else 
  4.  $ua = ""
  5. $tmp = getbrowser($ua); 
  6. if($tmp != "") { 
  7.  $br = explode(' ',$tmp); 
  8.  if(stristr($br[0],'chrome')) 
  9.   $brimg = "/chrome.png"
  10.  elseif(stristr($br[0],'firefox')) 
  11.   $brimg = "/firefox.png"
  12.  elseif(stristr($br[0],'opera')) 
  13.   $brimg = "/opera.png"
  14.  elseif(stristr($br[0],'internet')) 
  15.   $brimg = "/ie.png"
  16.  elseif(stristr($br[0],'Safari')) 
  17.   $brimg = "/Safari.png"
  18.  elseif(stristr($br[0],'UC')) 
  19.   $brimg = "/ucweb.png"
  20.  else  
  21.   $brimg = "/anonymouse.png"
  22.  $return .= " <img src='".$brimg."' title='".getbrowser($ua)."' />"

到这里,大功告成,剩下的有时间的话,再把其他浏览器补全了,目前只支持chrome,ie,firefox,opera等简单的识别.

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论