WP Super Cache静态化页面后使能WP Postviews

Posted by Harid十月 - 30 - 2010 Leave comments

wp-postviews新版本(如1.6)已经与Wp-super-cache兼容,不过请留意header.php里是否开了wp_head(),以让插件能添加AJAX代码。

—————————-2012年5月11日更新————————-

星期九昨天晚上装了一个显示文章浏览次数的插件——WP-Postviews。这是一个大名鼎鼎的插件,不过它与一些缓存插件不能和平共处,如安装了WP Super Cache,则它不能实时显示计数情况。我在安装WP-Postviews后,还遇到了一系列其它的问题,像卸载了WP Super Cache与DB Cache Reloaded后,还是无法正常启用该插件,使它计数等。经过一番GG后,我还是找到了问题的根源。

首先下载WP Postviews插件,最新的版本是1.5,这个版本已经不与WP Super Cache冲突了,虽然文章浏览次数在刷新页面后并没有增加,但是WP Postviews插件在后台还是在计数的,只是得删除当前缓存后才能显示。 同时,星期九还有一个插件是DB Cache Reloaded,用来减少数据库查询次数的,有人说它与WP Postviews也不兼容,但是经查看,我可以肯定它的最新版本与Wp Postviews也是不冲突的,完全兼容。注意,另外还有几款插件可以实现相同功能, 至于为什么选择WP Postviews,可以去这里瞧瞧:传送门>>

要让文章浏览次数显示还得在合适的地方调用该插件的函数。我是在主题的index.php、single.php、archive.php三个文件里添加了调用代码,调用代码如下:

1
<?php if(function_exists('the_views')) { the_views(); } ?>

接下来要解决文章浏览次数在不卸载缓存插件的前提下让其实时显示的问题

这里有一个插件,叫Ajax_the_views,Wordpress官网的描述是这样的:

The Ajax_the_views WordPress plugin extends WP-PostViews so that the number of post views is displayed via Ajax, meaning it will be accurate even if a caching plugin is being used.

也就是它能通过AJAX显示当前的浏览次数,这样即使开启了缓存也可以显示了。

对于一般的主题,安装好这一个插件也就能正常计数了,但是如果曾经对主题做过大幅改动,尤其在header.php里优化过,删除了”<?php wp_head(); ?>“这一句的朋友就可能还是什么都不显示。星期九就遇到了这一问题,因为我曾经在header.php的<head></head>里做过很大的改动,并删除了上面说的这一句(因为它加载的一串代码并没有多大的用)。

解决方法就是把这一句话再添加回来,也就是将下面的代码置于</head>前面:

1
<?php wp_head(); ?>

现在试一下的话应该可以显示“0 views”了。前面我说了,这一句话会在网页源文件的<head></head>里加上一些没有多大用的东西。可见超人流水帐的一篇博文,传送门>>。而且,它会让一些插件可以在<head></head>里插入一些自己的东西,如JS、CSS加载呀之类的。我相信有很多人都将一些常用插件的CSS、JS与主题的style.css、JS文件分别合并在一起了的,星期九就是如此。如果做过这类的CSS、JS文件合并,则可能不再需要让插件将这些文件的加载项插入<head></head>里面,这时可以修改插件文件来实现,或者就是删除上面的这一句话。

也就是说,一旦我们再将这句话添加回来,那么就只能通过修改那些合并过CSS、JS的插件的文件了,在其文件里删除相应的加载语句。

另外还需要注意的一个地方是,添加回来这句“<?php wp_head(); ?>”,则<head></head>里会加载Wordpress自带的JQuery库,也就是会出现如下的一句话:

1
<script type='text/javascript' src='http://www.yourdomain.com/wp-includes/js/jquery/jquery.js?ver=1.4.2'></script>

这个文件有72KB之巨,而且我发现完全可以用谷歌的JQuery库(谷歌的是54KB)来替代它。所以我曾经在优化<head></head>的时候就用谷歌的JQuery库取代了它(怎么加载谷歌的这个库,见:链接平移与侧边滑动导航栏),现在它又回来了,怎么去掉它呢?

打开/wp-includes/script-loader.php文件,查找“jquery.js”字符串,大概在第119行能找到这么一句:

1
$scripts->add( 'jquery', '/wp-includes/js/jquery/jquery.js', false, '1.4.2');

我们不能将这一句直接删除或者注释掉,因为在后台的时候,必须得用到这个库(可以在这用谷歌的库来替换,不过不推荐),那么加个判断就可以了,让这一句只在后台的时候运行,将其改为:

1
2
3
if(is_admin()){
	$scripts->add( 'jquery', '/wp-includes/js/jquery/jquery.js', false, '1.4.2');
}

至此,一切 ok !

   声明:本文采用 BY-NC-SA 协议进行授权 | 星期九
   原创文章转载请注明:转自《WP Super Cache静态化页面后使能WP Postviews

  1. 博主,wp-postviws1.6版主与wp super cache冲突吗?我用了ajax the views之后感觉显示的浏览人数还是比较少,有时候有好几个人评论了,但是浏览次数却为1

    • @互联网战, wp-postviews1.6与wp-super-cache已经不冲突的,当然,必须在header里面开wp_head(),让wp-postviews插件的AJAX语句能够执行。

      • @Harid, 先帮你点点右边的广告,嘿嘿。我后来看了wp-postviews的源码,它在wp-head里加入了ajax统计了,确实能够实时统计,缺点是不能实时显示,显示的是缓存时的数字,如果缓存更新,则能够显示更新后的。我现在使用了ajax-the-views,可以实时显示

        • @互联网战, 不实时更新也没有关系啊,只要它在后台确实在更新就行。我已经卸了ajax-the-views了,虽然这个插件是轻量级插件,但是毕竟多了一个插件。
          PS: 谢谢您帮我点广告。

    • @JC, 你的页面源码中,在<head>对中貌似没有调用WP-postviews的JQuery代码。你启用wp-head()函数了吗?

  2. DB cahce相对来说我还是觉得db cache重要点,WP Postviews用不用都无关紧要,这个统计很不准的说,感觉


分享按钮