显示标签为“wp-postviews”的博文。显示所有博文
显示标签为“wp-postviews”的博文。显示所有博文

2022年11月17日星期四

WP-PostViews实现近期热门文章排行的方法

WP-PostViews是按文章的浏览量显示最多/最少文章,但是没有限定时间,浏览量是全站文章统计的,这就存在一个问题:先发布的文章由于时间更久,浏览量累计起来更大,所以热门文章排行很久就不会产生变化。

据说WP-PostViews以前的版本提供了get_timespan_most_viewed这个函数来实现设定日期的文章排行,之后这个函数取消了。

2019年在WP-PostViews插件的讨论中,有人提出“Display most viewed posts in some period of time”,不过插件作者的答复是“This option was never possible because the plugin only stored accumulated post views.”作者有点不负责任地答非所问,即使「插件仅存储累计的帖子浏览量」,也可以实现给定时间内的文章排行啊。

我在浏览其他的帖子中发现了这个问题的解决方法,只需增加几行代码就行了,步骤如下:

1、找到WP-PostViews插件下的wp_postviews.php文件

2、找到Display Most Viewed Page/Post的get_most_viewed函数

3、在$most_viewed = new WP_Query( array( ) ); 中添加以下代码:

'date_query' => array('after' => '1 year ago',),

你可以按需将时间参数改为1 week ago、1 month ago等。

不过,这种方法有个问题,当插件升级后修改的内容会丢失,需要重新添加代码。

2013年6月26日星期三

促使WP-PostViews插件作者排除中国大陆搜索引擎机器人

在我刚开始使用WordPress经典插件WP-PostViews为博客文章计数的时候,就发现WP-PostViews存在一个问题,它不能排除掉中国大陆的搜索引擎机器人,也就是说文章的计数中包含了机器人(或蜘蛛)的浏览量。这样,即使你在插件的设置选项中排除了机器人的访问数,但是不久你将发现文章的Views会出现异常增长。

这个问题只对中国大陆的网站有影响,因为插件作者并没有考虑到我们的国情,他在WP-PostViews的Exclude Bot Views code中并没有排除掉baidu、360、soso、sogou的蜘蛛,而这几个正是我国广大网民使用最多的搜索引擎。

我们可以修改WP-PostViews插件的代码来排除掉国内的搜索蜘蛛,确保文章访问数的纯净。(方法点这里

但是这两天WP-PostViews连升两级,我又懒得每次都自己去修改插件代码。于是抱着试一试的态度联系插件作者,让他把国内的蜘蛛加进去,这样对于我来说就一劳永逸了。

说干就干,找到Lester Chan的电子邮箱,一封求助邮件发了过去。

没想到他很快就回复了我的邮件:
Can I know what is the useragent baidu and soso used? I can add it and commit the code. If you can paste just the difference here it would be good.

他让我把国内蜘蛛的useragent发给他,于是我就把baidu、360、sogou、sosou的useragent统统发给了他,顺便把这几个搜索引擎的市场份额也告诉了他。

没过多久,作者给我发来邮件说已经添加了代码。我上Github看到作者wp-postviews.php的备注已经注明Add China search engines bots了。

以前听过联系国外作者很容易也很热心,这次体会到了。

2013年6月25日星期二

促使WP-PostViews插件作者排除中国大陆搜索引擎机器人

在我刚开始使用WordPress经典插件WP-PostViews为博客文章计数的时候,就发现WP-PostViews存在一个问题,它不能排除掉中国大陆的搜索引擎机器人,也就是说文章的计数中包含了机器人(或蜘蛛)的浏览量。这样,即使你在插件的设置选项中排除了机器人的访问数,但是不久你将发现文章的Views会出现异常增长。

这个问题只对中国大陆的网站有影响,因为插件作者并没有考虑到我们的国情,他在WP-PostViews的Exclude Bot Views code中并没有排除掉baidu、360、soso、sogou的蜘蛛,而这几个正是我国广大网民使用最多的搜索引擎。

我们可以修改WP-PostViews插件的代码来排除掉国内的搜索蜘蛛,确保文章访问数的纯净。(方法点这里

但是这两天WP-PostViews连升两级,我又懒得每次都自己去修改插件代码。于是抱着试一试的态度联系插件作者,让他把国内的蜘蛛加进去,这样对于我来说就一劳永逸了。

说干就干,找到Lester Chan的电子邮箱,一封求助邮件发了过去。

没想到他很快就回复了我的邮件:

Can I know what is the useragent baidu and soso used? I can add it and commit the code. If you can paste just the difference here it would be good.

他让我把国内蜘蛛的useragent发给他,于是我就把baidu、360、sogou、sosou的useragent统统发给了他,顺便把这几个搜索引擎的市场份额也告诉了他。

没过多久,作者给我发来邮件说已经添加了代码。我上Github看到作者wp-postviews.php的备注已经注明Add China search engines bots了。

以前听过联系国外作者很容易也很热心,这次体会到了。

2013年1月29日星期二

让WP-PostViews排除(国内)机器人的访问数

博客安装了WP-PostViews插件用来显示文章的浏览次数,但是我发现显示出来的访问次数与谷歌分析(Analytics)的统计数据不一致,WP-PostViews统计出来的数据远远大于谷歌分析的数据。于是我就怀疑WP-PostViews统计数据包含了机器人的访问量,可是我在插件的设置里面明明把Exclude Bot Views的值置为Yes了,原则上已经排除了网络爬虫机器人的访问次数了。

我在谷歌中满世界寻找WP-PostViews插件排除机器人访问的方法,来回变换中英文的搜索关键字,最终还是没有找到解决的办法。后来我才知道,国外用户使用WP-PostViews插件不会遇到我们的问题,原来从中做怪的是国内的机器人\爬虫\蜘蛛。

求人不如求己,拿出WP-PostViews插件的源代码来看。在wp-postviews.php找到了排除机器人访问次数的代码(不妨叫作Exclude Bot Views code),如下所示:


if(intval($views_options['exclude_bots']) == 1) {
$bots = array('Google Bot' => 'googlebot', 'Google Bot' => 'google', 'MSN' => 'msnbot', 'Alex' => 'ia_archiver', 'Lycos' => 'lycos', 'Ask Jeeves' => 'jeeves', 'Altavista' => 'scooter', 'AllTheWeb' => 'fast-webcrawler', 'Inktomi' => 'slurp@inktomi', 'Turnitin.com' => 'turnitinbot', 'Technorati' => 'technorati', 'Yahoo' => 'yahoo', 'Findexa' => 'findexa', 'NextLinks' => 'findlinks', 'Gais' => 'gaisbo', 'WiseNut' => 'zyborg', 'WhoisSource' => 'surveybot', 'Bloglines' => 'bloglines', 'BlogSearch' => 'blogsearch', 'PubSub' => 'pubsub', 'Syndic8' => 'syndic8', 'RadioUserland' => 'userland', 'Gigabot' => 'gigabot', 'Become.com' => 'become.com');
$useragent = $_SERVER['HTTP_USER_AGENT'];
foreach ($bots as $name => $lookfor) {
if (stristr($useragent, $lookfor) !== false) {
$should_count = false;
break;
}
}
}

稍微解释一下上面的代码功能:

$bots数组用来存放机器人标识的关键字。

$useragent是访问站点的user-agent标识。

foreach()用来遍历数组,如果探测到访问站点的user-agent标识和bots数组中机器人标识匹配,则不计数。

作者想要实现排除机器人访问数的意图,通过以上的代码大致可以做到。但是仔细研究$bots数组会发现,它里面没有国内搜索爬虫的标识,比如Baiduspider、360spider、Sosospider等。所以WP-PostViews插件并没有排除掉国内常见的机器人。

我在站点统计中找到了站点的访问情况,一般的主机空间都会提供站点的Report功能。下图所示为我的站点一周内的访问情况:

Agent

可以看到站点每天被不同的蜘蛛或机器人访问,而这些机器人并没有记录在WP-PostViews插件的bots数组中,以至于并没有被排除掉。为了排除掉国内的蜘蛛访问数,只需在bots数组中把蜘蛛的标识添加进去即可。我也是懒于研究了,干脆来个干净的,把Spider、Bot、Slurp统统咔嚓掉(注意:这种做法有误杀的可能)。具体做法是修改Exclude Bot Views code为下面的代码:


if(intval($views_options['exclude_bots']) == 1) {
$bots = array('Google Bot' => 'googlebot', 'Google Bot' => 'google', 'MSN' => 'msnbot', 'Alex' => 'ia_archiver', 'Lycos' => 'lycos', 'Ask Jeeves' => 'jeeves', 'Altavista' => 'scooter', 'AllTheWeb' => 'fast-webcrawler', 'Inktomi' => 'slurp@inktomi', 'Turnitin.com' => 'turnitinbot', 'Technorati' => 'technorati', 'Yahoo' => 'yahoo', 'Findexa' => 'findexa', 'NextLinks' => 'findlinks', 'Gais' => 'gaisbo', 'WiseNut' => 'zyborg', 'WhoisSource' => 'surveybot', 'Bloglines' => 'bloglines', 'BlogSearch' => 'blogsearch', 'PubSub' => 'pubsub', 'Syndic8' => 'syndic8', 'RadioUserland' => 'userland', 'Gigabot' => 'gigabot', 'Become.com' => 'become.com', 'Feedburner' => 'feedburner', 'Spider' => 'spider', 'Bot' => 'bot', 'Slurp' => 'slurp');
$useragent = $_SERVER['HTTP_USER_AGENT'];
foreach ($bots as $name => $lookfor) {
if (stristr($useragent, $lookfor) !== false) {
$should_count = false;
break;
}
}
}

让WP-PostViews排除(国内)机器人的访问数

博客安装了WP-PostViews插件用来显示文章的浏览次数,但是我发现显示出来的访问次数与谷歌分析(Analytics)的统计数据不一致,WP-PostViews统计出来的数据远远大于谷歌分析的数据。于是我就怀疑WP-PostViews统计数据包含了机器人的访问量,可是我在插件的设置里面明明把Exclude Bot Views的值置为Yes了,原则上已经排除了网络爬虫机器人的访问次数了。

我在谷歌中满世界寻找WP-PostViews插件排除机器人访问的方法,来回变换中英文的搜索关键字,最终还是没有找到解决的办法。后来我才知道,国外用户使用WP-PostViews插件不会遇到我们的问题,原来从中做怪的是国内的机器人\爬虫\蜘蛛。

求人不如求己,拿出WP-PostViews插件的源代码来看。在wp-postviews.php找到了排除机器人访问次数的代码(不妨叫作Exclude Bot Views code),如下所示:

if(intval($views_options['exclude_bots']) == 1) {	$bots = array('Google Bot' => 'googlebot', 'Google Bot' => 'google', 'MSN' => 'msnbot', 'Alex' => 'ia_archiver', 'Lycos' => 'lycos', 'Ask Jeeves' => 'jeeves', 'Altavista' => 'scooter', 'AllTheWeb' => 'fast-webcrawler', 'Inktomi' => 'slurp@inktomi', 'Turnitin.com' => 'turnitinbot', 'Technorati' => 'technorati', 'Yahoo' => 'yahoo', 'Findexa' => 'findexa', 'NextLinks' => 'findlinks', 'Gais' => 'gaisbo', 'WiseNut' => 'zyborg', 'WhoisSource' => 'surveybot', 'Bloglines' => 'bloglines', 'BlogSearch' => 'blogsearch', 'PubSub' => 'pubsub', 'Syndic8' => 'syndic8', 'RadioUserland' => 'userland', 'Gigabot' => 'gigabot', 'Become.com' => 'become.com');	$useragent = $_SERVER['HTTP_USER_AGENT'];	foreach ($bots as $name => $lookfor) { 		if (stristr($useragent, $lookfor) !== false) { 			$should_count = false;			break;		} 	}}

稍微解释一下上面的代码功能:

$bots数组用来存放机器人标识的关键字。

$useragent是访问站点的user-agent标识。

foreach()用来遍历数组,如果探测到访问站点的user-agent标识和bots数组中机器人标识匹配,则不计数。

作者想要实现排除机器人访问数的意图,通过以上的代码大致可以做到。但是仔细研究$bots数组会发现,它里面没有国内搜索爬虫的标识,比如Baiduspider、360spider、Sosospider等。所以WP-PostViews插件并没有排除掉国内常见的机器人。

我在站点统计中找到了站点的访问情况,一般的主机空间都会提供站点的Report功能。下图所示为我的站点一周内的访问情况:

Agent

可以看到站点每天被不同的蜘蛛或机器人访问,而这些机器人并没有记录在WP-PostViews插件的bots数组中,以至于并没有被排除掉。为了排除掉国内的蜘蛛访问数,只需在bots数组中把蜘蛛的标识添加进去即可。我也是懒于研究了,干脆来个干净的,把Spider、Bot、Slurp统统咔嚓掉(注意:这种做法有误杀的可能)。具体做法是修改Exclude Bot Views code为下面的代码:

if(intval($views_options['exclude_bots']) == 1) {	$bots = array('Google Bot' => 'googlebot', 'Google Bot' => 'google', 'MSN' => 'msnbot', 'Alex' => 'ia_archiver', 'Lycos' => 'lycos', 'Ask Jeeves' => 'jeeves', 'Altavista' => 'scooter', 'AllTheWeb' => 'fast-webcrawler', 'Inktomi' => 'slurp@inktomi', 'Turnitin.com' => 'turnitinbot', 'Technorati' => 'technorati', 'Yahoo' => 'yahoo', 'Findexa' => 'findexa', 'NextLinks' => 'findlinks', 'Gais' => 'gaisbo', 'WiseNut' => 'zyborg', 'WhoisSource' => 'surveybot', 'Bloglines' => 'bloglines', 'BlogSearch' => 'blogsearch', 'PubSub' => 'pubsub', 'Syndic8' => 'syndic8', 'RadioUserland' => 'userland', 'Gigabot' => 'gigabot', 'Become.com' => 'become.com',  'Feedburner' => 'feedburner', 'Spider' => 'spider', 'Bot' => 'bot', 'Slurp' => 'slurp');	$useragent = $_SERVER['HTTP_USER_AGENT'];	foreach ($bots as $name => $lookfor) { 		if (stristr($useragent, $lookfor) !== false) { 			$should_count = false;			break;		} 	}}

2012年12月26日星期三

iNove主题添加文章浏览次数的功能

WordPress的iNove主题添加文章浏览次数的功能的效果图:

views

大致步骤如下(以下代码针对iNove主题,其他主题的操作过程类似):

1、安装wp-postviews插件,并设置

2、下载或制作一个浏览量图标view.gif存放到主题的img目录里(如果不需要的话这一步骤可省略)

view (点击下载

3、修改显示浏览量的页面(index.php、single.php、page.php等)

iNove主题添加文章浏览次数的功能

WordPress的iNove主题添加文章浏览次数的功能的效果图:

views

大致步骤如下(以下代码针对iNove主题,其他主题的操作过程类似):

1.安装wp-postviews插件,并设置

2.下载或制作一个浏览量图标view.gif存放到主题的img目录里(如果不需要的话这一步骤可省略)view 

3.修改显示浏览量的页面(index.php、single.php、page.php等)

2011年11月14日星期一

WP-PostViews插件的函数功能(包含浏览总数)

以前文章的浏览量计数使用的是WP-PostViews Plus插件,因为想着在网站里加入站点统计中的浏览总数功能,当时以为WP-PostViews不提供该功能,所以就使用了它的加强版插件。

这几天发现文章计数总出现问题,刚发布的文章访问数就立马飙升(可能是网络爬虫的访问数也计算在内了),我也没有细究,于是拿出WP-PostViews插件来研究。

WP-PostViews的函数在wp-postviews/wp-postviews.php里,通过函数名大致可以猜测其功能了。下面就让我们来细数一下它的主要函数功能。

the_views()是最主要的函数,显示文章的浏览次数。

get_least_viewed()显示最少被浏览的文章列表,包括文章或页面。

get_most_viewed()显示最多被浏览的文章列表,包括文章或页面。

get_least_viewed_category()显示某个分类下最少被浏览的文章列表,包括文章或页面。

get_most_viewed_category()显示某个分类下最多被浏览的文章列表,包括文章或页面。

get_most_viewed_ tag()显示某个标签下最多被浏览的文章列表,包括文章或页面。

get_least_viewed_tag()显示某个标签下最少被浏览的文章列表,包括文章或页面。

get_totalviews()显示浏览总数。

snippet_text()显示按要求截取文本片段。

这些函数中,我觉得用的最多的应该是the_views(),它用来显示文章的流量次数,你可以把下面这段代码添加到主题下的post.php和index.php中:



因为该插件提供Widget的小工具,其他的几个显示最多/最少文章列表的函数不用手工添加。

get_totalviews()函数可以显示整个站点的浏览总数,你可以在网站合适的位置添加下面的代码:



当然上述的函数可以通过修改参数来实现不同的功能。