我用wordpress仿了一个国外的模板,在本地调试一切正常,安装WP-PostViews插件后却发现WP-PostViews无法计数,无论我怎样刷新文章,阅读量还是0。于是百度了一轮,发现WP-PostViews不计数的原因有3个:
1、你处于登录状态,WP-PostViews不计算的浏览次数
WP-PostViews默认只有访客访问才计算阅读量,你如果处于登录wordpress的状态的话当然怎样刷新也没有效果啦。解决办法:退出登录或者把Count Views From设置成:Everyone。
2、安装缓存插件,网站被静态化了
如果你的网站安装了WP Super Cache、WP Rocket等缓存插件,网页被静态化了,你当然看不到浏览量的变化了。其实WP-PostViews还是在计算浏览量,只是前台网页被静态了看不到动态变化而已,当你重新更新网站缓存时,你就会看到文章一直积累的浏览量了。
当你使用缓存的插件的时候,会在根目录的配置文件wp-config.php中自动添加:
define("WP_CACHE", true);
WP-PostViews插件会判断wp-config.php是否开启 WP_CACHE,如果没有开启就使用PHP计数,如果开启了就使用ajax计数。
这个过程是WP-PostViews自动判断的,我们不需要任何设置,如果你不是通过缓存插件缓存网站的,需要手动开启WP_CACHE,不然WP-PostViews真的就不能统计浏览量了。
3、wordpress主题的头部模板文件header.php没有添加wp_head函数
我自己模仿的主题header.php中就是没有添加
<?php wp_head(); ?>
所以WP-PostViews插件无法算数。我们分析一下原因:
我们查看WP-PostViews插件的代码文件wp-postviews.php,找到以下代码:
### Function: Calculate Post Views add_action('wp_head', 'process_postviews' ); function process_postviews() {
process_postviews
就是PHP计数的功能函数,从add_action('wp_head', 'process_postviews' )
可以看出process_postviews
函数挂钩子挂到wp_head
函数上,简单地我们可以理解为wp_head
函数运行一次,就计数一次。
这样就说明如果没有调用wp_head
函数,WP-PostViews就无法计数。
提示:大部分wordpress插件都是需要wp_head
函数才能运行的,不使用wp_head
函数需要三思。
解决办法有两个:
1、添加wp_head函数
在主题的头部文件header.php添加上:
<?php wp_head(); ?>
这是最简单的办法,如果真的不想使用wp_head
函数,只能修改WP-PostViews插件的代码。
2、修改wp-postviews.php代码
打开后台,点击插件下”编辑” ,在”选择要编辑的插件”选择WP-PostViews,编辑wp-postviews.php文件,在文件内容找到:
add_action('wp_head', 'process_postviews' );
改成
add_action('get_header', 'process_postviews' );
原理很简单,我们把钩子挂到其他函数上就行。
注意:这个被挂钩子的函数一定要在每个主题的文件中都要被使用才行,get_header、get_footer
函数都是满足要求的