替换wp-postviews,沿用老数据实现计数与排行
- 发表于
- WordPress
本来想记录下BUG的处理,但改了下当做问题记录吧,文章计数BUG修复了!
在前一段时间合并插件的时候不知道弄了哪里,统计失效了,当时也发现了,然后又因为没时间来处理这个BUG一直拖着。今天解决了这个问题,统计重新开始工作,同时要说明的是在使用主题的朋友不用担心有这个BUG,因为给出的主题包是不含有这个问题的,这个问题是我自己使用中修改测试一些东西出现的。
顺便记一下一个wordpress替换wp-postviews插件,改为纯代码实现,同时继续保存之前的统计数据,显示文章排行的代码:
// 文章阅读统计,放在functions.php里
function getPostViews($postID,$isRelated=false){
$count_key = 'views';
$count = get_post_meta($postID, $count_key, true);
if(''==$count){
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}
if($isRelated){
echo $count.' +';
}else{
if(0==$count){
echo "被围观0次";
}else{
echo '被围观'.$count.'次';
}
}
}
function setPostViews($postID) {
$count_key = 'views';
$count = get_post_meta($postID, $count_key, true);
if(''==$count){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}else{
$count++;
update_post_meta($postID, $count_key, $count);
}
}
然后将如下统计和设置的函数放入到主题文件single.php的the_post()函数后面:
在你想实现文章阅读次数的地方可以放入下面代码:
如果想让浏览统计数字像WP-Postviews 插件一样会每3位加一个“,”号,例如“1,234”,那么就把此段代码改为:
如果要在后台文章列表显示文章阅读次数,那就继续加入:
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
function posts_column_views($defaults){
$defaults['post_views'] = __('Views');
return $defaults;
}
function posts_custom_column_views($column_name, $id){
if($column_name === 'post_views'){
echo getPostViews(get_the_ID(),true);
}
}
使用此方法实现文章统计排行
//热门文章排行,同时放在functions.php里
function the_most_views($days=0){
global $wpdb, $post;
if(0!=$days){
$limit_date = current_time('timestamp') - ($days*86400);
$limit_date = date("Y-m-d H:i:s",$limit_date);
$most_viewed = $wpdb->get_results("SELECT ID,post_title,post_date,post_status,post_id,meta_key,meta_value FROM $wpdb->posts,$wpdb->postmeta where $wpdb->posts.ID=$wpdb->postmeta.post_id AND post_date < '".current_time('mysql')."' AND post_date > '".$limit_date."' AND post_status = 'publish' AND $wpdb->postmeta.meta_key='views' ORDER BY CAST($wpdb->postmeta.meta_value as SIGNED) DESC LIMIT 10");
}else{
$most_viewed = $wpdb->get_results("SELECT ID,post_title,post_date,post_status,post_id,meta_key,meta_value FROM $wpdb->posts,$wpdb->postmeta where $wpdb->postmeta.meta_key='views' AND $wpdb->posts.ID=$wpdb->postmeta.post_id AND $wpdb->posts.post_status = 'publish' ORDER BY CAST($wpdb->postmeta.meta_value as SIGNED) DESC LIMIT 10");
}
if($most_viewed){
foreach ($most_viewed as $views) {
echo '
在需要显示热门文章的地方调用:
里面的参数$days=0时是所有文章排行,30天的话就是月排行了,180当然就是半年排行了,结束!
原文连接:替换wp-postviews,沿用老数据实现计数与排行
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。