替换wp-postviews,沿用老数据实现计数与排行
- 发表于
- WordPress
本来想记录下BUG的处理,但改了下当做问题记录吧,文章计数BUG修复了!
在前一段时间合并插件的时候不知道弄了哪里,统计失效了,当时也发现了,然后又因为没时间来处理这个BUG一直拖着。今天解决了这个问题,统计重新开始工作,同时要说明的是在使用主题的朋友不用担心有这个BUG,因为给出的主题包是不含有这个问题的,这个问题是我自己使用中修改测试一些东西出现的。
顺便记一下一个wordpress替换wp-postviews插件,改为纯代码实现,同时继续保存之前的统计数据,显示文章排行的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// 文章阅读统计,放在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()函数后面:
1 |
<?php setPostViews(get_the_ID()); ?> |
在你想实现文章阅读次数的地方可以放入下面代码:
1 |
<?php getPostViews(get_the_ID());?> |
如果想让浏览统计数字像WP-Postviews 插件一样会每3位加一个“,”号,例如“1,234”,那么就把此段代码改为:
1 |
<?php echo number_format(getPostViews(get_the_ID())); ?> |
如果要在后台文章列表显示文章阅读次数,那就继续加入:
1 2 3 4 5 6 7 8 9 10 11 |
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); } } |
使用此方法实现文章统计排行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//热门文章排行,同时放在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 '<li>'; echo '<a href="'. get_permalink($views->ID).'" rel="bookmark">'.$views->post_title.'</a>'; echo '</li>'; } }else{ echo '<li>当前设置没有文章可以显示。</li>'; } } |
在需要显示热门文章的地方调用:
1 |
<?php the_most_views($days);?> |
里面的参数$days=0时是所有文章排行,30天的话就是月排行了,180当然就是半年排行了,结束!
原文连接:替换wp-postviews,沿用老数据实现计数与排行
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。