在前面关于 WordPress 统计插件:Counterize II 中提到过 Popularity Contest 这个插件,这是一个我非常喜欢的插件。我想很多人都用过这个插件,而且基本上都不会有任何使用上的问题,因为这个插件很容易安装和使用。所以今天我会除了基本介绍下这个插件之外,然后谈谈怎么扩展使用这个插件。
描述
Popularity Contest 这个插件能够统计你的日志在日志,分类和存档各个页面的被浏览次数,以及留言和 trackbacks 的条数,然后通过这些数据来决定你的那些日志是最受欢迎的。对于每种类型的浏览和反馈,这个插件都会赋予一个数值,通过这些赋予的值用来创建每篇文章的 ‘流行度,并且这个值是可以更改的。
安装和使用
下载,然后上传 popularity-contest.php 文件到你的插件目录下,激活就已经安装完毕。安装之后,你可以到 Options > Popularity 修改每种类型的浏览和反馈的比重值。
安装之后就会在 Dashboard 下就会生成一个 Most Popular Posts 的页面,一段时间之后就可以在这个页面,看到详细信息,你首先看到的是总体上最流行的前50篇日志,然后是各种情况下浏览和反馈前10名的日志,以及各个 分类下最流行前10名的日志和各个时间段内最流行的文章,总之显示的信息,非常丰富。
另外在每篇日志下面都会显示 ‘Popularity: n%’ 和 ‘[?]‘ 。前面显示的是的这篇日志的流行度,后面的则是帮助信息。如果你不喜欢,可以让它们都不显示,办法是把插件中的 @define(‘AKPC_SHOWPOP’, 1); 和 @define(‘AKPC_SHOWHELP’, 1); 中的1改成0即可。
扩展应用
如果你是经常浏览本网站的时候,肯定注意到在每篇日志的信息栏上都有浏览次数,以及点击这个这个记录可以到达一个 Top-10 的页面(已取消链接)。很多人问我这是不是通过插件(有个 Post Views Plus 的插件可以实现这个功能)实现的,其实这个效果就是通过这个插件扩展应用的。
第1:创建函数 Get Post Views
查看 Popularity Contest 这个插在数据库中生成的表,可以知道,改表就是以 post_id 为 ID,其他项目为各种情况下浏览次数。如果我们在主题下的 functions.php 文件中创建个函数并以 post_id 为参数就可以调用出这篇日志被浏览次数。函数如下:
/** * Function Get Post Views * ------------------------------------------------------ * Get view for every post, this function is base on the plugins most popular posts */ function get_post_views ($post_id) { global $wpdb, $table_prefix; $sql = "SELECT single_views, feed_views FROM ". $table_prefix ."ak_popularity WHERE post_id = $post_id"; $views = $wpdb->get_results($sql); if ($views) { $view = $views[0]->single_views + $views[0]->feed_views; echo $view . ' Views'; } }
以上这个函数获取每篇日志下的具体页面和 Feed 的浏览数,你也可以获取其多的浏览数,把它加入其中。
然后在每篇日志的信息栏上输入以下代码:<?php if (function_exists(‘get_post_views‘)) get_post_views ($post->ID); ?>
你需要在 single.php,index.php,archive.php,search.php 等等文件都输入上面这个函数才能在每个页面上显示日志的显示次数。
第2:创建页面 Top-10
Popularity Contest 这个插件还提供以下3个模板函数:
- akpc_the_popularity()
- akpc_most_popular_in_cat()
- akpc_most_popular_in_month()
由它们的名字就知道它们分别列出最流行的日志,某类别下的最流行的日志,某月份的最流行的日志。所以我们就可以通过这些来实现我们的 Top 10 页面。
创建一个叫做 most.php 的页面模板,下载该文件 most.txt,然后把后缀名改成 php 即可,可能你需要根据你的模板文件进行一些必要的修改。
最后创建一个新页面,在 page template 选择 Top 10。具体显示效果,你可以查看本站的 Top 10 页面。这样就可以显示你网站上最流行的页面,增加你网站的流量。
你使用了这个插件了吗?你对这个插件有什么建议?你有什么更好的扩展应用?或者在使用这个插件有什么问题?请给我们留言!


好东东,我也正想写一篇呢,alex的这个pc插件可谓经典,还得过奖。如果想了解插件的完整做法,从自定义钩子函数,事件触发,数据库操作,admin panel和后台模块定义全有了。
唯一缺憾的地方是数据库操作似乎显得过于频繁。不知道有没有定义全局静态变量的方法,把2维统计表放在内存里,只是定期写数据库就好了。
支持 反对
看来你对这个插件研究的非常深,确实这个插件读写数据库是在太多了。然后我加上我写的这个 get post views,读写数据库又更频繁了。哎,这是唯一一点不好地方,你提供的方法,我也不是很明白,不知道有没有什么达人可以提供解答!
支持 反对
今天firefox上你的站点有问题?
支持 反对
什么问题?
支持 反对
不错,拿去研究~
支持 反对
奇怪,启用后出现了如下错误:
WordPress database error: [Table 'mtx029db1.wp_ak_popularity' doesn't exist]
SELECT ID, post_title FROM wp_posts LEFT JOIN wp_ak_popularity pop ON wp_posts.ID = pop.post_id WHERE post_status = ‘publish’ AND post_date < NOW() GROUP BY wp_posts.ID ORDER BY pop.total DESC LIMIT 10
支持 反对
ak_popularity 是这个插件创建的表,如果没有这个表,说明你没有安装成功!
支持 反对
谢谢!我怎么去创建这个表呢?禁用后重新启动显示:
Table ‘mtx029db1.wp_ak_popularity’ doesn’t exist on line: 340
说明没有成功,我是WP2.3版,空间是dreamhost
支持 反对
编辑插件,找到创建这个表的SQL语句,直接在数据库中执行!
支持 反对
这个top10的页面我下载下来后出错了.不知道要放在哪个目录里面?
Fatal error: Call to undefined function get_header() in G:\IIS\greenregion\wp-content\themes\green\top10.php on line 11
支持 反对
还有个文件 sidebar.php 是干嘛用的?
支持 反对
很好
很强大…
酷
支持 反对
鱼哥,帮我写个sidebar的widgets调用最热文章的函数么?我不会啊,按您说的fuctions不行,我用的是“Limau Orange 0.1 by Bob”模板
支持 反对
@世纪大厦 请查看我最新的两篇关于如何写 widget 插件的教程。谢谢。链接请自行搜索!
支持 反对
用上了,谢谢
支持 反对
确实非常好的一个插件,
因为是用wp来做cms,所以需求和blog稍有不同
对我来说最需要的就是能在分类里显示当前类别里浏览最多的文章,
因为在post view里不知道怎么实现所以换了这个插件
遗憾的是不知道怎么改为single页面里也能显示当前类别里浏览最多的文章
还有是否有参数可以在TOP10列表的文章后显示浏览次数?
支持 反对
Popularity Contest 不能做到你说的形似!
支持 反对
唉不懂PHP真是郁闷啊…
今天乱凑了一通总算暂时搞定在single页面显示当前类别里浏览最多的文章
前面加上这一段
$categories = get_the_category();
foreach ($categories as $category) :
后面这样写
<?php akpc_most_popular_in_cat($limit = 10, $before = '', $after = '',$cat_ID = $category->term_id); ?>
暂且不管是否不规范.暂时能用
支持 反对
雪山飞猪能否升级一下你给出的most.php呢,
现在已经是WP2.3.1了,数据库结构变了很多
我正想生成一个top 10页面
列出所有分类的top 10文章,不知如何修改
支持 反对
我已经决定放弃使用这个插件了!
支持 反对
我也准备放弃了
单页数据库查询次数80次……还好现在访问人数以个位计
还是用回postviews
而且上次搞定分类页面显示当前分类top10之后,Popularity Contest 也用不着了
支持 反对
@define(‘AKPC_SHOWPOP’, 1); 改为0 是隐藏人气显示
@define(‘AKPC_SHOWHELP’, 1); 这个改为0才是 隐藏 帮助问号
支持 反对
看来不错 值得研究研究 不过就是不知道放在WP之后会不会出现问题
支持 反对1
Popularity Contest
由于插件产生了一个致命错误,该插件无法被启用。
无助..
支持 反对
修改Popularity-contest.php的第59行require(‘../../wp-blog-header.php’);为 require(‘../wp-blog-header.php’);就可以了
支持 反对
启动后在查看浏览量页面出现大量如下错误,不知何故?
Warning: Division by zero in /home/bxr57917/public_html/wp-content/plugins/popularity-contest.php on line 1273
wp:2.5.1
插件版本:popularity-contest.1.3b4
支持 反对