Wordpress程序做小网站很好用, 尤其是个人博客,拥有大量的主题和插件,就算不懂代码都能做出很漂亮的网站。
纯原生的Wordpress程序已经足够满足个人博客的使用,但有时可能由于某些使用习惯,或者需求,我们想计量每篇文章的阅读量。但这功能,Wordpress里面基础功能并没有包含。实现的途径,目前有很多, 大部分可以通过插件,或主题本身自带来实现。 出于学习的目的,通过以下例子,我们可以自己也实现,集成到我们的主题模板里面。
思路:
利用wordpress文章的meta(文章自定义字段)来记录对应文章的总阅读数。
创建一个该统计的url, 可以通过js访问来增加阅读量,这样就可以避免蜘蛛爬虫访问的时候,爆发式增长阅读量。只记录真实的阅读量。
实现
首先实现文章阅读量的增加:
// 文章浏览统计
function count_views($post){
$post_id = 0;
if (is_numeric($post)) {
$post_id = intval($post);
} else{
$post_id = $post->ID;
}
$counts = get_post_meta($post_id, 'viewcounts', true);
if ($counts == ''){
$counts = 0;
add_post_meta($post_id, 'viewcounts', 1, true);
}else{
update_post_meta($post_id, 'viewcounts', $counts+1);
}
return $counts;
}
每次调用将增加传入id的文章的阅读量+1。
接下来,我们需要一条可以访问到这个功能的链接。
通过增加query_vars来增加在访问中解析url中的参数
function myfunc_query_vars($query_vars) {
$query_vars[] = 'viewcounts';
$query_vars[] = 'post_id';
return $query_vars;
}
add_filter('query_vars', 'myfunc_query_vars');
这样在每次wordpress解析url中的参数的时候,如果里面有viewcounts和post_id将不会忽略,并保存在WP实例中。
下面将两个结合起来,就可以通过url添加参数式的访问,来增加文章访问量的结果。
function myfunc_viewcounts(WP &$wp) {
if (!array_key_exists('viewcounts', $wp->query_vars) or !array_key_exists('post_id', $wp->query_vars)){
return ;
}
$post_id = $wp->query_vars['post_id'];
$counts = count_views($post_id);
echo $counts;
die();
}
add_action('parse_request', 'myfunc_viewcounts');
这段代码的意义是,它将截取url中同时有viewcounts和post_id参数的url,并通过调用增加访问的方法来实现文章阅读增量。最后用die(),结束这次的访问,因为这个文章打开后,再通过js来访问的链接,而且wordpress后面只会跳转到404,所以后面就不用管了, 在这里结束就行。
以上代码,可以放到主题的functions.php 文件中,即可运行。