目前 WordPress 系统建站已经非常流行,占据了建设系统的半壁江山,无非是 WordPress 功能强大开发方便扩展性极强,但是 wordpress 程序1 E m K i j默认是没有文章浏览器统计,这点就很鸡肋。之前我们有给大家分享过,纯代码为 wordpress 添加文章浏览量统计功能,但是无论是用纯代码还是使用 wordpress 插件 wp-postview,当我们刷新当前页面会算作一次浏览数量,那今天创客云给大家介绍下刷新不重复记录的文章浏览量统计代码!
方法一
一、在 wordpress 主题下 functions.php 里增加以下代码:
- //ab ] _ G ; L T #dd by charleswu
- function getPostViews($postID)z | ` z ? f \ &) I ) + Y S#123;
- $count_keyM 5 p $ = 'post_views_couk : 9 R ,nt';
- $count = get_post_meta($postID, $count_key, true);
- if ($count == '') {
- dx T Y Y y Helete_post_meta($postIj 6 $ # i { jD, $count_key);
- add_post_meta($postID, $count_key, '0'\ c } ^ \ n x @1;;
- return "0";
- }
- return $count;
- &! ! p ) K \ V b 6#125;
- function setPostViews($postID) {
- $coui \ Xnt_key = 'post_views_count';
- $count =N ^ P get_5 a R 3 \ cpost_meta($postID, $count_key, true);
- if ($count == '') {
- $count = 0;
- delete_post_meta($postID, $count_key) - Z w U N U L .1;;
- add_post_meta($postID, $count_key, '0');
- &N . # u h j S f#125; elsH U k F $ )e {
- $count++;
- update_post_meta($postID, $count_key, $count);
- }O g E s # m
- }
二、解决刷新统计数增加,一定要放在文章页面的最前面,貌似 php 设置 cookie 之前不能有输出,蛋H q B q { J R疼。我的是 single.php 页面:
- <?php
- $post_id=get_the_ID();
- if(isset($_COOKIE['views'.$post_id.COOKIEHASH]) &ac / ! 3 ? Pmp;& $_COOKIE['views'.$post_id.COOKIEHASH] == '1')
- {
- }
- else&A k } V#123;
- setPostViews($post_id);
- setcookie('views'.$poE T v k 2 v ^ . Ast_id.COOKIEHASH,'1',time() + 36x e ?00,COOKIEPATH,COOKIE_DOMAIN);//设置时间间隔
- }
- ?>? q / u ~ J F H 0
其实第一段代码和网上能找] v ( U +到的普通 wordpress 文章浏览量添加代码是一样的,重点是第二段的需要在文章页面 single 里面添加的这段代码起着决定性的作用。
方法二
此方法扒自T V z 4 y } @ !某款插件,支持重复刷新不增加 wordpress 文章浏览量M / , 2 v n C 3 0统计的代码,相对于前面分享的刷新不累加的 wordpress 文章浏览次数统计功能的教程代码,功能更加完整,代码更加完善,支持统计所有人的浏览和排除机器人的浏览量,有兴趣的博主可以参考或直接采用,懒人博主则可以直接使用 wp-postviews 插件。
1、在当前主题的X q ^ H q functions.php 文件中添加以下代码,作用是统计计数以及C a @ K : _获取浏览数:
- /***********文章统计q o N .**= + ? 0 @ & . W _*******/
- function process_postview\ 2 F y ; { ts() {
- global $us/ + Q M { L )er_ID, $post;
- if(check_cookie($post))
- retuY Q u k | r K (rn;
- if(is_int($post)&C ^ l M i k { i#41; {
- $post = getK W o N } F_post($post);
- }
- in 3 k D D b & =f(!wp_is_post_revision($post)) {
- ifB 4 = % 1 F =(is_single() || is_page())( \ f { {
- $id = intval0 q H 9 o 8 o n0;$post->ID);
- //$post_views = get_post_customa z J D($id);
- $post_views = get_post_meta($id,'_check_count',true);
- //统计所有人
- $should_count = true;
- /w E u Q / 6 ~ 8 w/排除机器人
- $bots = array('Google Bot' => 'googlebot', 'Google Bot' => 'google', 'MSN' => 'msnbot', 'Alex' => 'ia_archiver', 'Lycos' => 'lycos', 'Ask Jeeves' => 'jeeves', 'Altavista' =>; 5 K l P K 'scooter', 'AllTheWeb' => 'fast-webcrawler', 'Inktomi' => 'slurp@inktomi', 'Turnitin.com' => 'turnitinbot', 'Tt y % G ? a # Jechnorati' => 'technoraj K ]ti', 'Yahoo' => 'yahoo', 'Findexa' => 'findexa', 'NextLinks1 o k f 8' => 'e = p ( \ { \ _findlinks',+ W I _ ~ R 'Gais' => 'gaisbo', 'WiseNut{ # / ?'W Y * F 5 s . => 'zyborg', 'WhoisSource' => 'surveybot', 'Bloglines' => 'bloglines', 'Blo[ n %gSearch' => 'blogsearch',n h X D F / t G = 'PubSub' => 'pubsub', 'Syndic8' => 'syndic8', 'RadioU? + gse} \ b crland' => 'userland', 'Gigabot' => 'gigabot', 'Become.i [ n y 3 A A ) [com' => 'become.com','Baidu Bot'=>'Baiduspider');
- $useragent =/ 2 G = W % z - $_SERVER['HTTP_USER_AGENT'];
- foreach (J # S e d F ? [ ,$bots as $name => $lookfor) {
- if ) ! g @ T ^0;stristr($useragent, $lookfor) !== false) &/ [ n @ D#123;
- $should_count = false;
- break;
- }
- }
- if($should_count) {
- if(!update_post_meta($id, '_check_count', ($post_views+1))) {
- add_post_meta($id, '_c4 0 Y V K eheck_count', 1, true);
- }
- }
- }
- }
- &D S f k I a#125;
- function check_cookie($post){
- $COOKNAME = 'ashuwp_view';
- if(isset($_COOKIE[$COOKNAME]))
- $cookie = $_CO% ? S f ] = 8 K BOKIE[$COOKNAME];
- else
- retur@ c Mn false;
- $id = $post->ID;
- if(empty($id)){
- return false;
- q K T 1 r O5;
- if(8 4 ^!empty($cookie)){
- $list = explodee 2 P #40;'a', $cookie);
- if(!empty($list) && in_arrayZ _ w ( X v0;$id, $list)){
- return t[ ) xrue;
- }
- & - E ! C [5;
- return false;
- }
- ### Function: Display The PosN / . e B | % ^t Views
- function the_views($display = true,$id) {
- $post_views = intval(get_post_meta($id,'_check_count',true));
- $output = number_format_i18n(. H * L ;$postY y } S_views);
- if($display) {n ; #;
- echo $output;
- S D R n L Q 025; else {
- return $output;
- }
- }
- ### Function: Display Total Views
- if(!function_exists('get_totalviews')) {
- function get_totalviews($display = true) {
- global $wpdb;
- $total_views = intval($wpdb->get_var1 , e t a q("SELECT SUM(meta_value+0) FROM& 3 w 8 S ^ b ] i $wpdb->postmeta WHERE meta_key = 'S u v e # # 3 H T_check_count'"% 6 a ? U # n1;);
- if($display) {
- echo number_format_i18n($total_views)g n : | x 5 \ i 3;;
- } else {
- return $total_views;
- }
- }
- }
- ### Function: Add Views Custom Fields
- add_action('publish_post', 'add_views_fields');
- add_action('publish_3 / _ m C a I ~page', 'add_views_fields')1 w S r v V A;;
- function add_views_fields($pT R 7 N I - N sost_ID) {
- glob) [ a A V d .al $wpdb;
- if(!wp_is_post_revision($post_ID)) {
- add_post_meta($postK \ g ;_ID, '_check_count', h ^ 5 j, 0, true);
- }
- Q 0 j C P5;
- ### Function: Delete Views Custom Fields
- add_action('delete_post', 'delete_views_fields'&M , & s )#41;;
- function delete_views_fj y ] a ^ 9 Nields($post_ID) {
- global $wpdb;
- if(!wp_is_post_t H * [ #revision($post_ID)) {Y N O O 6 m e;
- delete_post_meta($post_ID= E D 0, '_checkY 2 0 K_count');
- }
- }
2、一般只统计文章的浏览量,所以把下面的代码添加到当前主题 single~ $ s $ G ) ^.php 文件的第一行,代码作用是:X p | 3 j i用来设置 cookie,会在用户浏览器端增加一个形如: 123a45a45a113 其中字母 a 是分隔文章 ID 的,有效期是一天,由于设置 cookie 前不能有任何输出,所以这些代码要添加在文件的最最开头。
- $COOKNAME = 'ashuwp_view'; //cookiI X = * } p ) Z #e名称
- $u ! G o \ A JTIME = 3600 * 24;
- $PATH = '/';
- $id = $posts[0]->ID;
- $expire = time() + $TIME; //cookie有效期
- if(isset($_COOKIE[$COOKNAME]))
- $cookie = $_COOKIE[$COOKNAm p BM? X 5 i xE]; //获取cookie
- else
- $S m * j s L r = 5cookie = '';
- if(empo \ / j 5 9 # : pty($co@ { jokie)){
- //如果没有cookie
- setcookie($COOKNL u e a $ ~ M ,AME, $id, $expire, $PATHd X 1 l M);
- }else{
- //用a分割成数组
- $list = explode('a', $cookie);
- //如果已经存在本文的id
- if(!in_array($id, $list))D S V a{
- setcookie($COOKNAME, $cookie.'a'.$id, $expire,} l $ W ` $PATH)b ] I ?;;
- }
- }
3、再在 single.php 文件的主循环部分(while( have_posts() ) : tB X P e a x G h ihe_post();)后面自己喜欢的Q ; *位置添加函数调用代码:
- process_postviews();
4、在要显示浏览数的地方添加调用代码:
- <?5 i u 5 1 T [ O aphp the_views(true,$po9 $ ] o _st->ID), E * f F 5 v | J;;?>
两种方法基本雷同,但是感觉第一种更简单点,具体那种方法更受欢迎更实用还需要大家的测试评估,5 Y 2 1 ? r这就是增强型 wordpress 文章浏览量统计支持重复刷新不增加计数的全部内容,需要大家能够用到不枉我们收{ 4 4 A X集整理!