一聚教程网:一个值得你收藏的教程网站

热门教程

wordpress可防刷新文章浏览次数统计代码

时间:2022-06-25 18:56:17 编辑:袖梨 来源:一聚教程网

第一步

按照惯例,把以下代码扔到functions.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');  
    }  
}

 第二步

接下来设置Cookie

在主题的single.php的最最最最前面加上以下代码

 代码如下 复制代码
$COOKNAME = 'ashuwp_view'; //cookie名称  
$TIME = 3600 * 24;  
$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);  
    }  

?>

这段代码里 Cookie的有效期为1天~

第三步 www.111com.net

继续修改single.php

查找

while( have_posts() ) : the_post();
 在它后面加上

process_postviews();
第四步

在你想要显示浏览数的地方加上一下代码

浏览数:ID);?>
 

再补充一个

1.首先在主题下functions.php里增加以下代码,这段代码也是网上可以找到的

 代码如下 复制代码


//add by charleswu
function getPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if ($count == '') {
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
        return "0";
    }
    return $count;
}
function setPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if ($count == '') {//www.111com.net
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    } else {
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}

2.解决刷新统计数增加,一定要放在文章页面的最前面,貌似php设置cookie之前不能有输出,蛋疼。我的是single.php页面

 代码如下 复制代码

    $post_id=get_the_ID();
    if(isset($_COOKIE['views'.$post_id.COOKIEHASH]) && $_COOKIE['views'.$post_id.COOKIEHASH] == '1')
    {
           
    }
    else{   
        setPostViews($post_id);
        setcookie('views'.$post_id.COOKIEHASH,'1',time() + 3600,COOKIEPATH,COOKIE_DOMAIN);//设置时间间隔
    }
?>

热门栏目