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. 阿邙 says:

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

    1. zwwooooo says:

      @阿邙
      痛并快乐着

  2. 毕扬 says:

    我现在连评论数都想删掉

    1. zwwooooo says:

      @毕扬
      哈,随意啦

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

    1. zwwooooo says:

      @小清新图片
      无所谓啦,简单了解下浏览数而已

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

    1. zwwooooo says:

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

  5. wp的强大就在于插件的多

  6. bbis says:

    好吧,我没有5.1假期。

  7. 所谓刚子 says:

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

    1. zwwooooo says:

      @所谓刚子
      我不折腾typeecho,找牧风吧

  8. 郑永 says:

    手机测试。

  9. Leniy says:

    我只在后台查看

    1. zwwooooo says:

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

    2. Leniy says:

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

    3. zwwooooo says:

      @Leniy
      玩代码的喜欢

    4. Leniy says:

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

    5. zwwooooo says:

      @Leniy
      对啊,插件方便。

    6. Leniy says:

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

    7. zwwooooo says:

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

    8. Leniy says:

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

    9. zwwooooo says:

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

    10. Leniy says:

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

    11. zwwooooo says:

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

    12. Leniy says:

      @zwwooooo
      webkit、moz等

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

  11. 集趣 says:

    以前好像看过更短的代码

    1. zwwooooo says:

      @集趣
      反正差不多原理吧

  12. SEV says:

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

    1. zwwooooo says:

      @SEV
      在切换观察

  13. 云淡然 says:

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

    1. zwwooooo says:

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

  14. 阿邙 says:

    我是来试cookie的。,

    1. zwwooooo says:

      @阿邙
      然后呢?是不是木有问题了?

    2. 阿邙 says:

      @zwwooooo
      又丢了。。

    3. 阿邙 says:

      填表还在 cookies查看最近评论木有了

    4. 阿邙 says:

      @阿邙
      需要再评论一次才能看到

    5. 阿邙 says:

      @阿邙
      杯具 自动填表又木有了,

    6. 阿邙 says:

      我再测试一会儿。。

    7. 阿邙 says:

      @阿邙
      又木有了。。

    8. SEV says:

      @zwwooooo
      公告栏及以下式样似乎有问题!

    9. zwwooooo says:

      @阿邙
      囧了,其他人好像没事啊,我用chrome测试也没事,都几天了,cookie没丢

    10. zwwooooo says:

      @SEV
      ctrl+f5刷新下,修改了js和css

    11. 阿邙 says:

      @zwwooooo
      那我再试试。电脑好几天木有重启了。

    12. zwwooooo says:

      @阿邙
      呃,清空下 zww.me 的 cookie 应该就可以了吧

  15. 阿邙 says:

    又丢了。

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

    1. zwwooooo says:

      @你好先森
      谢谢指正,已修正。

  17. 老谢 says:

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

    1. zwwooooo says:

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

    2. 老谢 says:

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

    3. zwwooooo says:

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

    4. 老谢 says:

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

  18. WEB学习 says:

    不错,用来试试看。

发表评论

昵称 *

网址

B em del U Link Code Quote