大家都习惯使用 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); ?>
祝大家五一假期快乐!
- 本文标题:代码版文章浏览数
- 本文链接:https://zww.me/post-views-code-version.z-turn
- 发布时间:2013年04月29日 20:50
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
五一节你们快乐。
我不快乐。
@阿邙
痛并快乐着
我现在连评论数都想删掉
@毕扬
哈,随意啦
果然精简了不少。。不过开了nginx缓存便会吃掉不少浏览数,不过看习惯后就觉得很好,物以稀为贵。。。YY
@小清新图片
无所谓啦,简单了解下浏览数而已
用这个代码是不是无法输出全站的浏览量和按浏览排行?
@不亦乐乎
文章不是说了嘛,只统计和输出,要那些功能直接插件,代码的话阿邙那有吧。
wp的强大就在于插件的多
好吧,我没有5.1假期。
我是多门的想看到 typecho版本的啊 哈哈
@所谓刚子
我不折腾typeecho,找牧风吧
手机测试。
我只在后台查看
@Leniy
哪里查看无所谓吧,主要是你需要
@zwwooooo
我看大家都喜欢用免插件版的,不知道为什么
@Leniy
玩代码的喜欢
@zwwooooo
我喜欢弄成插件再启用,这样复用性好,来回换主题很方便
@Leniy
对啊,插件方便。
@zwwooooo
据说使用插件耗内存?
@Leniy
别被误导,不管是直接整合到主题还是插件,主要看代码质量,一般插件写的要尽量“方便”所以会觉得比较臃肿。
@zwwooooo
恩,我有几个发布的插件就这样,明明是很简单的改几个参数的东东,为了设置简单,又是update_option又是写html后台页面
@Leniy
为了“傻瓜方便”,程序员工作量翻几倍
@zwwooooo
感触很深。我这种外行给自己写主题,css都要很麻烦。专门写主题的,还要考虑各种浏览器的兼容性,太难了
@Leniy
现在不太去兼容ie8以下了
@zwwooooo
webkit、moz等
无所谓,直接插件,就自己看到,不给游客开放查看次数。
以前好像看过更短的代码
@集趣
反正差不多原理吧
大叔你现在用回插件了吗?
@SEV
在切换观察
为什么先要delete,然后再add呢,而不是直接update??
@云淡然
当时拿代码时没细细分析,直接del可能会出现网络不稳定时的误删,0.2.0 版本自己改了一下,已更改为用 update 来判断是否 add
我是来试cookie的。,
@阿邙
然后呢?是不是木有问题了?
@zwwooooo
又丢了。。
填表还在 cookies查看最近评论木有了
@阿邙
需要再评论一次才能看到
@阿邙
杯具 自动填表又木有了,
我再测试一会儿。。
@阿邙
目前ok
@阿邙
又木有了。。
@zwwooooo
公告栏及以下式样似乎有问题!
@阿邙
囧了,其他人好像没事啊,我用chrome测试也没事,都几天了,cookie没丢
@SEV
ctrl+f5刷新下,修改了js和css
@zwwooooo
那我再试试。电脑好几天木有重启了。
@阿邙
呃,清空下 zww.me 的 cookie 应该就可以了吧
又丢了。
反馈个笔误:一般调用方法那里错写了个中文逗号。
@你好先森
谢谢指正,已修正。
已经用上,感谢Z大,另外问一下为啥不直接用the_views函数
@老谢
不要跟热门插件冲突呗,当然一般人都不会同时开着插件又用这个代码版
@zwwooooo
酱紫,我原来用插件版现在改成代码版,不想再去改主题,继续用了the_views函数。。
@老谢
自行改就行了,很简单嘛。
@zwwooooo
嗯,改了,我就是好奇问下为啥不直接用the_views,更方便不是~
不错,用来试试看。