代码版文章浏览数

» 2013-04-29 WordPress 109条评论

大家都习惯使用 WP-Postviews 这款插件来统计文章浏览数,这个插件附带了很多统计输出函数,其实大部分人也就只要统计下浏览数,然后显示出来就行,所以“重新复活”的阿邙盆友折腾了个代码版。

原文:免插件输出文章浏览数及浏览最多文章

我个人只要“统计和输出浏览数”功能,所以挪用了主体函数部分

--------------------------------------------------
Change log:

2013.05.09 风险性敬告:昨天本人在折腾服务器,对博客搬了几次家,加上博客压力测试导致网站频频 502,然后今天发现首页的文章浏览数被清零了,虽然不一定是这个代码导致的,但请使用的朋友自行承担风险。

2013.05.13 Update: 代码已更新到 0.2.0 版本,针对05.09那天的敬告,我重新分析了下代码并且做了更改,取消 delete_post_meta 函数处理,改为 update_post_meta 函数的行为判断来对文章的计数判断,按道理能防止浏览数的删除,目前本博在用,有兴趣的朋友可以试试。

--------------------------------------------------

主体函数代码:把下面代码放入主题的 functions.php 里面(<?php ... ?> 里面)

Version: 0.1.0(停用

//////// postviews - by http://of.gs/un-plugin-post-views.html, modify by zwwooooo|zww.me, Version 0.1.0
function custom_the_views($post_id, $echo=true, $views=' views') {
	$count_key = 'views';
	$count = get_post_meta($post_id, $count_key, true);
	if ($count == '') {
		delete_post_meta($post_id, $count_key);
		add_post_meta($post_id, $count_key, '0');
		$count = '0';
	}
	if ($echo)
		echo number_format_i18n($count) . $views;
	else
		return number_format_i18n($count) . $views;
}
function set_post_views() {
	global $post;
	$post_id = $post->ID;
	$count_key = 'views';
	$count = get_post_meta($post_id, $count_key, true);
	if (is_single() || is_page()) {
		if ($count == '') {
			delete_post_meta($post_id, $count_key);
			add_post_meta($post_id, $count_key, '0');
		} else {
			update_post_meta($post_id, $count_key, $count + 1);
		}
	}
}
add_action('get_header', 'set_post_views');

Version: 0.2.0(2013.05.13)

/*
postviews
Origin: http://of.gs/un-plugin-post-views.html
Modify: zwwooooo https://zww.me
Version:0.2.0
*/
function custom_the_views($post_id, $echo=true, $unit=' views') {
	$count_key = 'views';
	$views = get_post_custom($post_id);
	$views = intval($views['views'][0]);
	if ($views == '') {
		return '';
	} else {
		if ($echo) {
			echo number_format_i18n($views) . $unit;
		} else {
			return number_format_i18n($views) . $unit;
		}
	}
}
function set_post_views() {
	global $post;
	$post_id = intval($post->ID);
	$count_key = 'views';
	$views = get_post_custom($post_id);
	$views = intval($views['views'][0]);
	if (is_single() || is_page()) {
		if(!update_post_meta($post_id, 'views', ($views + 1))) {
			add_post_meta($post_id, 'views', 1, true);
		}
	}
}
add_action('get_header', 'set_post_views');

浏览数显示函数:custom_the_views($post_id, $echo=true, $views=' views')

参数说明:
1. $post_id: 文章ID,一般填 $post->ID
2. $echo: true/false,显示/获取浏览数(默认是显示-true)
3. $views: 浏览数单位(默认是:空格+views)

一般调用方法:<?php if ( function_exists('custom_the_views') ) custom_the_views($post->ID); ?>

PS:
如果原来用了 WP-Postviews 这个插件,只要把 <?php the_views(); ?> 改为 <?php custom_the_views($post->ID); ?> 即可。
或者是:
<?php if ( function_exists('the_views') ) the_views(); ?> 改为 <?php if ( function_exists('custom_the_views') ) custom_the_views($post->ID); ?>

祝大家五一假期快乐!

zww
or
oooo

“代码版文章浏览数”有109条评论

  1. cangzhang says:

    学习咯~

  2. Cat says:

    这个不支持静态吧~

    1. zwwooooo says:

      @Cat
      没测试,根据 add_action('get_header', 'set_post_views'); 加数的。

  3. 万戈 says:

    果然精简了很多呀

    1. zwwooooo says:

      @万戈
      其实也偷懒,神马自适应的太花时间,所以……

  4. 其实右下角的足迹功能更好

    1. zwwooooo says:

      @空空裤兜
      有时间整理下

    2. SEV says:

      @zwwooooo
      谢谢整理,谢谢了喔,很适合博客的功能。

    3. zwwooooo says:

      @SEV
      还没动手,最近忙其他的

  5. 郑永 says:

    我前不久刚撤去插件,换成代码版的,还不错。

    1. zwwooooo says:

      @郑永
      嗯,反正也就统计下而已

  6. 久酷 says:

    五一喽,过来瞅瞅

    1. zwwooooo says:

      @久酷
      五一都去哪玩了?

  7. axiu says:

    有没有人告诉你,把人家名字写错了…… :grin:

    1. zwwooooo says:

      @axiu
      有一个叫axiu的告诉我了,已纠正

    2. axiu says:

      @zwwooooo
      那打200块钱感谢他一下吧,是个好人啊

    3. zwwooooo says:

      @axiu
      已经打了,估计他100%收不到 :cool:

    4. axiu says:

      @zwwooooo
      那真是可惜了,要不你打给我,帮你转给他 :cool: (pia飞~

  8. migong says:

    :mrgreen: 我去把插件换成这个代码试试去。。。 :evil:

    1. zwwooooo says:

      @migong
      嗯,试试吧

  9. SEV says:

    厉害,好不大叔把

    您好, SEV, 点击这里可以查看您最近的评论。

    传我邮箱一份儿吧!谢谢了哦 :grin:

    1. zwwooooo says:

      @SEV
      代码没整理 …… 稍后有时间放出

    2. SEV says:

      @zwwooooo
      3Q,每天刷你博客N次,顺便帮你点点广告,在小屏幕不能看你的边栏怎么办呢?

    3. zwwooooo says:

      @SEV
      小屏幕不需要边栏内容了,最多下次加上最新评论。。。

    4. @zwwooooo
      强烈求代码...这功能很赞的...

    5. zwwooooo says:

      @Jason Cooper
      忙忘了。。。

  10. 大发 says:

    这个和postview的原理一样,连数据都不用倒过来了。。

    1. zwwooooo says:

      @大发
      其实就是 postviews,只用核心函数而已

  11. :mrgreen:
    劳动节快乐

    1. zwwooooo says:

      @常阳时光
      劳动节不劳动,哈

  12. 小五 says:

    用了缓存插件还能统计吗?

    1. zwwooooo says:

      @小五
      木有测试……

  13. Sepia says:

    好吧!一不小心就进来了!

    1. zwwooooo says:

      @Sepia
      继续不小心

  14. 五一节快乐啊!
    这个代码好精简啊,只是改代码在换主题时需要再次修改吧 :grin:

    1. zwwooooo says:

      @七零后CFO
      难道代码会自己跑到你新换的主题么?那就太厉害了

  15. 大叔五一快乐 :cool:

    1. zwwooooo says:

      @哥特复兴
      节日都过了我才来回复,祝你开心。

  16. W3Cshare says:

    悲剧的五一又要宅在家里了 :arrow:

    1. zwwooooo says:

      @W3Cshare
      我也是一直宅在家里

    2. W3Cshare says:

      @zwwooooo
      你怎么也宅了,不是应该有各种美女么 :mrgreen:

    3. zwwooooo says:

      @W3Cshare
      美女,LP是干嘛的

    4. W3Cshare says:

      @zwwooooo 说的美女就是你LP啊 :mrgreen:

    5. zwwooooo says:

      @W3Cshare
      各种美女。。。各种LP,国家不准三妻四妾

  17.   很不错。。

  18. airoschou says:

    一直用代码统计的路过~
    5.1已过,晚来的祝福~ :cool:

    1. zwwooooo says:

      @airoschou
      其实插件方便,不过这个插件还是需要动手,干脆就整合了

  19. 公子 says:

    主要还是缓存后不计数的问题比较头疼。。。

    1. 阿邙 says:

      @公子
      Hyper Cache貌似可以计数。

    2. 公子 says:

      @阿邙
      是嘛? :neutral: 我这就不变。

    3. zwwooooo says:

      @公子
      哈,一般博客不需要缓存

  20. 有点蓝 says:

    五一快乐。
    我在用这样一段代码,不知道跟这个有什么区别。

    /* 文章阅读计数 */
    function record_visitors()
    {
    if (is_singular())
    {
    global $post;
    $post_ID = $post->ID;
    if($post_ID)
    {
    $post_views = (int)get_post_meta($post_ID, 'views', true);
    if(!update_post_meta($post_ID, 'views', ($post_views+1)))
    {
    add_post_meta($post_ID, 'views', 1, true);
    }
    }
    }
    }
    add_action('wp_head', 'record_visitors');
    function post_views($before = '', $after = '', $echo = 1)
    {
    global $post;
    $post_ID = $post->ID;
    $views = (int)get_post_meta($post_ID, 'views', true);
    if ($echo) echo $before, number_format($views), $after;
    else return $views;
    }

发表评论

昵称 *

网址

B em del U Link Code Quote