一些插件实现了为wordpress文章统计访问次数的功能,例如postview,本文来用简单的代码来实现这一功能。
在wordpress主题文件functions.php中增加下面三个函数:
[code lang="php" line="1"]
/**
* 名称:wordpress文章访问次数
* 作者:否子戈
* 主页:http://www.utubon.com
* 用法:将这段代码放置于functions.php中,将set_view_count函数按照下文的方法加入文章single.php开头
*/
function get_view_count($post_id = ''){
if($post_id == '')$post_id = get_the_ID();
$count_key = '查看次数';
$count = get_post_meta($post_id, $count_key, true);
if($count == ''){
delete_post_meta($post_id,$count_key);
add_post_meta($post_id,$count_key,'0');
return '查看0次';
}
return '查看'.$count.'次';
}
function the_view_count($post_id = ''){
if($post_id == '')$post_id = get_the_ID();
echo get_view_count($post_id);
}
function set_view_count($post_id = ''){
if(!is_single())return;
if(isset($_COOKIE['view_count_'.$post_id.COOKIEHASH]) && $_COOKIE['view_count_'.$post_id.COOKIEHASH] == '1')return;
if($post_id == '')$post_id = get_the_ID();
$count_key = '查看次数';
$count = get_post_meta($post_id,$count_key,true);
if($count == ''){
delete_post_meta($post_id,$count_key);
add_post_meta($post_id,$count_key,'1');
}else{
$count ++ ;
update_post_meta($post_id,$count_key,$count);
}
setcookie('view_count_'.$post_id.COOKIEHASH,'1',time() + 3600,COOKIEPATH,COOKIE_DOMAIN);
}
[/code]
利用wordpress的post_meta功能,我们能轻松的实现为文章增加一种属性,例如赞成、反对、喜欢、访问者等等,总之我们就是利用它,实现了为文章添加访问次数的功能。
第一个函数是获取访问次数,第二个函数是将次数显示出来,第三个函数是用来增加访问次数的。
在主题single.php的get_header()前面使用第三个函数,只有在get_header()之前调用它,cookie才能生效。
[code lang="php" line="1"]
ID);
if(!have_posts()){get_404_template();return;}
get_header();the_post();
?>
[/code]
这段代码还加入了用cookie来记录访问的时间间隔,在一小时内刷新这篇文章不会统计为多个访问,只会被算作一次访问。
还有一个问题,如果你的wordpress开启了缓存怎么办,缓存格式为html的博客是不会执行php函数的,也不会调用数据库,因此我们要用到ajax的方法,即使访问html文档,也能同时激活一次php执行程序。postview有一个升级版插件postajaxview,在显示的时候,通过ajax执行某个php程序,得到数据并返回显示,当访问某篇文章时通过ajax执行另一个php程序,以增加访问次数。由于不同的博客使用的脚本版本不同,本文就只说思路,不贴代码了。
确实完美,不过发现一个问题,当我发表文章时,这个次数就会自动刷为4,不知道是不是wordpress发布文章这个过程也会触发函数
[…] 网上关于统计文章浏览次数代码有几个经典的版本,这里分享的是个人最喜欢的,简洁方便,添加功能代码后只需在需要的位置调用即可。此代码使用自定义的字段“views”来,和?WP-Postviews?插件相同保留原有浏览数据,无缝对接,卸载插件后不受任何影响。但是只要每刷新一次就会统计一次,参考乌徒帮的代码加入了用cookie来记录访问的时间间隔,如果在一小时内刷新文章不会多次统计,只会被算作一次访问,这样一来可谓相当完美了。 […]
这些信息会保留的,都在文章的自定义栏目里面,保存在数据表postmeta中
若在主题中添加实现了此功能,以后更换主题,统计信息会保留吗? 2012年11月15日20:26:57