Blog

代码版文章浏览数

大家都习惯使用 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

声明: 除非注明,ZWWoOoOo文章均为原创,转载请以链接形式标明本文地址
本文地址: https://zww.me/post-views-code-version.z-turn

109 comments

  1. cangzhang cangzhang Google Chrome 26 Google Chrome 26 Windows 8 Windows 8

    学习咯~

    沙发
  2. Cat Cat Firefox 20 Firefox 20 Windows 7 Windows 7

    这个不支持静态吧~

    板凳
  3. zwwooooo zwwooooo Firefox 20 Firefox 20 Windows 7 Windows 7

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

  4. ......
  5. 阿邙 阿邙 Firefox 20 Firefox 20 Windows 7 Windows 7

    五一节你们快乐。
    我不快乐。

    21楼
  6. 毕扬 毕扬 Google Chrome 26 Google Chrome 26 Windows 7 Windows 7

    我现在连评论数都想删掉

    22楼
  7. 小清新图片 小清新图片 Google Chrome 21 Google Chrome 21 Windows XP Windows XP

    果然精简了不少。。不过开了nginx缓存便会吃掉不少浏览数,不过看习惯后就觉得很好,物以稀为贵。。。YY

    23楼
  8. 不亦乐乎 不亦乐乎 Google Chrome 26 Google Chrome 26 Windows 7 Windows 7

    用这个代码是不是无法输出全站的浏览量和按浏览排行?

    24楼
    • zwwooooo zwwooooo Firefox 20 Firefox 20 Windows 7 Windows 7

      @不亦乐乎
      文章不是说了嘛,只统计和输出,要那些功能直接插件,代码的话阿邙那有吧。

  9. 小二优惠码 小二优惠码 Google Chrome 21 Google Chrome 21 Windows 7 Windows 7

    wp的强大就在于插件的多

    25楼
  10. bbis bbis Google Chrome 26 Google Chrome 26 Windows 7 Windows 7

    好吧,我没有5.1假期。

    26楼
  11. 所谓刚子 所谓刚子 Google Chrome 26 Google Chrome 26 Windows 7 Windows 7

    我是多门的想看到 typecho版本的啊 哈哈

    27楼
  12. 郑永 郑永 Google Chrome 26 Google Chrome 26 Android 4.1.2 Android 4.1.2

    手机测试。

    28楼
  13. Leniy Leniy Google Chrome 26 Google Chrome 26 Windows 7 Windows 7

    我只在后台查看

    29楼
    • zwwooooo zwwooooo Firefox 20 Firefox 20 Windows 7 Windows 7

      @Leniy
      哪里查看无所谓吧,主要是你需要

    • Leniy Leniy Google Chrome 26 Google Chrome 26 Windows 7 Windows 7

      @zwwooooo
      我看大家都喜欢用免插件版的,不知道为什么

    • zwwooooo zwwooooo Firefox 20 Firefox 20 Windows 7 Windows 7

      @Leniy
      玩代码的喜欢

    • Leniy Leniy Google Chrome 28 Google Chrome 28 Windows 7 Windows 7

      @zwwooooo
      我喜欢弄成插件再启用,这样复用性好,来回换主题很方便

    • zwwooooo zwwooooo Firefox 20 Firefox 20 Windows 7 Windows 7

      @Leniy
      对啊,插件方便。

    • Leniy Leniy Google Chrome 26 Google Chrome 26 Windows 7 Windows 7

      @zwwooooo
      据说使用插件耗内存?

    • zwwooooo zwwooooo Firefox 20 Firefox 20 Windows 7 Windows 7

      @Leniy
      别被误导,不管是直接整合到主题还是插件,主要看代码质量,一般插件写的要尽量“方便”所以会觉得比较臃肿。

    • Leniy Leniy Google Chrome 26 Google Chrome 26 Windows XP Windows XP

      @zwwooooo
      恩,我有几个发布的插件就这样,明明是很简单的改几个参数的东东,为了设置简单,又是update_option又是写html后台页面

    • zwwooooo zwwooooo Firefox 20 Firefox 20 Windows 7 Windows 7

      @Leniy
      为了“傻瓜方便”,程序员工作量翻几倍

    • Leniy Leniy Google Chrome 26 Google Chrome 26 Windows XP Windows XP

      @zwwooooo
      感触很深。我这种外行给自己写主题,css都要很麻烦。专门写主题的,还要考虑各种浏览器的兼容性,太难了

    • zwwooooo zwwooooo Firefox 20 Firefox 20 Windows 7 Windows 7

      @Leniy
      现在不太去兼容ie8以下了

    • Leniy Leniy Google Chrome 26 Google Chrome 26 Windows 7 Windows 7

      @zwwooooo
      webkit、moz等

  14. 平板盒子 平板盒子 Google Chrome 26 Google Chrome 26 Windows 8 Windows 8

    无所谓,直接插件,就自己看到,不给游客开放查看次数。

    30楼
  15. 集趣 集趣 Google Chrome 26 Google Chrome 26 Windows 7 Windows 7

    以前好像看过更短的代码

    31楼
  16. SEV SEV Google Chrome 26 Google Chrome 26 Windows 8 Windows 8

    大叔你现在用回插件了吗?

    32楼
  17. 云淡然 云淡然 Chrome 26 Chrome 26 iPhone iOS 6.1.2 iPhone iOS 6.1.2

    为什么先要delete,然后再add呢,而不是直接update??

    33楼
    • zwwooooo zwwooooo Firefox 20 Firefox 20 Windows 7 Windows 7

      @云淡然
      当时拿代码时没细细分析,直接del可能会出现网络不稳定时的误删,0.2.0 版本自己改了一下,已更改为用 update 来判断是否 add

  18. 阿邙 阿邙 Firefox 20 Firefox 20 Windows 7 Windows 7

    我是来试cookie的。,

    34楼
  19. 阿邙 阿邙 Firefox 20 Firefox 20 Windows 7 Windows 7

    又丢了。

    35楼
  20. 你好先森 你好先森 Google Chrome 29 Google Chrome 29 Windows 8 Windows 8

    反馈个笔误:一般调用方法那里错写了个中文逗号。

    36楼
  21. 老谢 老谢 Google Chrome 34 Google Chrome 34 Windows 7 Windows 7

    已经用上,感谢Z大,另外问一下为啥不直接用the_views函数 :evil:

    37楼
    • zwwooooo zwwooooo Firefox 29 Firefox 29 Windows 8.1 Windows 8.1

      @老谢
      不要跟热门插件冲突呗,当然一般人都不会同时开着插件又用这个代码版

    • 老谢 老谢 Google Chrome 34 Google Chrome 34 Windows 7 Windows 7

      @zwwooooo
      酱紫,我原来用插件版现在改成代码版,不想再去改主题,继续用了the_views函数。。

    • zwwooooo zwwooooo Firefox 29 Firefox 29 Windows 8.1 Windows 8.1

      @老谢
      自行改就行了,很简单嘛。

    • 老谢 老谢 Google Chrome 34 Google Chrome 34 Windows 7 Windows 7

      @zwwooooo
      嗯,改了,我就是好奇问下为啥不直接用the_views,更方便不是~

  22. WEB学习 WEB学习 Google Chrome 33 Google Chrome 33 Windows XP Windows XP

    不错,用来试试看。

    38楼

Leave a Reply