wordpress 代码实现记录文章浏览数和网站总访问数(Cookies)

网上看到了很多教程,基本上千篇一律的抄袭,而且代码大部分不能用(中英文符号错误,空格丢失等等种种毛病),所以自己记录一个测试可用的(不记录重复刷新)。
来源:http://www.ashuwp.com/courses/highgrade/586.html

主题-编辑,打开function.php,在最后部分添加代码(本站使用的wordpress在function.php中没有结束符号  ‘?>’  ,可能其他版本有,要把代码添加在结束符号前)

/***********文章统计*********/  
function process_postviews() {  
    global $user_ID, $post;  
    if(check_cookie($post))  
        return;  
    if(is_int($post)) {  
        $post = get_post($post);  
    }  
    if(!wp_is_post_revision($post)) {  
        if(is_single() || is_page()) {  
            $id = intval($post->ID);  
            //$post_views = get_post_custom($id);  
            $post_views = get_post_meta($id,'_check_count',true);  
            //统计所有人  
            $should_count = true;  
            //排除机器人  
            $bots = array('Google Bot' => 'googlebot', 'Google Bot' => 'google', 'MSN' => 'msnbot', 'Alex' => 'ia_archiver', 'Lycos' => 'lycos', 'Ask Jeeves' => 'jeeves', 'Altavista' => 'scooter', 'AllTheWeb' => 'fast-webcrawler', 'Inktomi' => 'slurp@inktomi', 'Turnitin.com' => 'turnitinbot', 'Technorati' => 'technorati', 'Yahoo' => 'yahoo', 'Findexa' => 'findexa', 'NextLinks' => 'findlinks', 'Gais' => 'gaisbo', 'WiseNut' => 'zyborg', 'WhoisSource' => 'surveybot', 'Bloglines' => 'bloglines', 'BlogSearch' => 'blogsearch', 'PubSub' => 'pubsub', 'Syndic8' => 'syndic8', 'RadioUserland' => 'userland', 'Gigabot' => 'gigabot', 'Become.com' => 'become.com','Baidu Bot'=>'Baiduspider');  
            $useragent = $_SERVER['HTTP_USER_AGENT'];  
            foreach ($bots as $name => $lookfor) {  
                if (stristr($useragent, $lookfor) !== false) {  
                    $should_count = false;  
                    break;  
                }  
            }  
            if($should_count) {  
                if(!update_post_meta($id, '_check_count', ($post_views+1))) {  
                    add_post_meta($id, '_check_count', 1, true);  
                }  
            }  
        }  
    }  
}  
 
function check_cookie($post){  
    $COOKNAME = 'ashuwp_view';  
    if(isset($_COOKIE[$COOKNAME]))  
        $cookie = $_COOKIE[$COOKNAME];  
    else  
        return false;  
    $id = $post->ID;  
    if(empty($id)){  
        return false;  
    }  
    if(!empty($cookie)){  
        $list = explode('a', $cookie);  
        if(!empty($list) && in_array($id, $list)){  
            return true;  
        }  
    }  
    return false;  
}  
### Function: Display The Post Views  
function the_views($display = true,$id) {  
    $post_views = intval(get_post_meta($id,'_check_count',true));  
    $output = number_format_i18n($post_views);  
    if($display) {  
        echo $output;  
    } else {  
        return $output;  
    }  
}  
 
### Function: Display Total Views  
if(!function_exists('get_totalviews')) {  
    function get_totalviews($display = true) {  
        global $wpdb;  
        $total_views = intval($wpdb->get_var("SELECT SUM(meta_value+0) FROM $wpdb->postmeta WHERE meta_key = '_check_count'"));  
        if($display) {  
            echo number_format_i18n($total_views);  
        } else {  
            return $total_views;  
        }  
    }  
}  
 
### Function: Add Views Custom Fields  
add_action('publish_post', 'add_views_fields');  
add_action('publish_page', 'add_views_fields');  
function add_views_fields($post_ID) {  
    global $wpdb;  
    if(!wp_is_post_revision($post_ID)) {  
        add_post_meta($post_ID, '_check_count', 0, true);  
    }  
}  
### Function: Delete Views Custom Fields  
add_action('delete_post', 'delete_views_fields');  
function delete_views_fields($post_ID) {  
    global $wpdb;  
    if(!wp_is_post_revision($post_ID)) {  
        delete_post_meta($post_ID, '_check_count');  
    }  
}

在single.php的最前面添加设置cookies代码,(我自己默认设置时间为1h)

<?php
$COOKNAME = 'ashuwp_view'; //cookie名称  
$TIME = 3600 * 1;  
$PATH = '/';  
   
$id = $posts[0]->ID;  
$expire = time() + $TIME; //cookie有效期  
if(isset($_COOKIE[$COOKNAME]))  
    $cookie = $_COOKIE[$COOKNAME]; //获取cookie  
else  
    $cookie = '';  
       
if(empty($cookie)){  
    //如果没有cookie  
    setcookie($COOKNAME, $id, $expire, $PATH);  
}else{  
    //用a分割成数组  
    $list = explode('a', $cookie);  
    //如果已经存在本文的id  
    if(!in_array($id, $list)){  
        setcookie($COOKNAME, $cookie.'a'.$id, $expire, $PATH);  
    }  
}
?>

在single.php的while( have_posts() ) : the_post();循环后添加代码(不能写在内部,否则两个php标签会出错):

<?php process_postviews();?>

最后,在需要的位置添加代码(一般是在content.php的

<footer class="entry-footer"></footer>

内写上,这样能把浏览数加在文章最后和作者、标签、日期等等放在一起)

浏览:<?php the_views(true,$post->ID);?>

效果:

接下来是添加总站的访问方法

采用最简单的文件读取,在任意界面(我添加在了footer.php里面,还带了一个QQ二维码QAQ)添加代码:

总访问量:      
            <?php
            $f_open = fopen("count.txt","r+"); //打开指定的文件
            if(!$f_open) echo "error1 ";
            $count = fgets($f_open); //读取文件中的数据
            $count = $count + 1; //将变量$count的值加1
            rewind($f_open); //打开指定的文件
            fwrite($f_open,$count); //向文件中写入新的数据
            fclose($f_open); //关闭文件
            echo $count;
            ?>

出现过错误,因为没有给wordpress目录写权限,在服务器上改权限就行了。
实际结果看上去感觉还不错,如果以后有更好的方法再记录下来:

发布者

VC-Robot

游戏爱好者,动漫迷,C++修炼中,编程菜鸟,随性

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据