看了下哼哼猪的去插件使用代码统计文章阅读的代码,结果会导致以前的数据失效,文章阅读数变为0重新开始统计。其实数据还在,只是失效了,如果不用的话就成为垃圾数据了。
那么简单修改下代码就可以继续使用原插件的数据了。
首先在主题文件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);
- }
- }
如果要在后台文章列表显示文章阅读次数,那就继续加入:
- 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);
- }
- }
然后将如下统计和设置的函数放入到主题文件single.php的the_post()函数后面:
- <?php setPostViews(get_the_ID()); ?>
主题和主题不一样但放置的位置一定是一样的,例如我的放置后的代码:
- <?php if (have_posts()) : while (have_posts()) : the_post(); ?><?php setPostViews(get_the_ID()); ?>
在你想实现文章阅读次数的地方可以放入下面代码:
- <?php getPostViews(get_the_ID());?>
通过上面的设置,就具有了显示文章阅读次数的功能了,另外可自行修改显示阅读次数的文字(在上面的functions.php代码中),你也可以删掉代码中的文字,在调用的地方手工随意加上文字。
接下来告诉大家,怎么实现最热文章和本文排行(根据阅读次数来排的),在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>';
- }
- }
在需要显示热门文章的地方调用:
- <?php the_most_views($days);?>
里面的参数$days=0时是所有文章排行,30天的话就是月排行了,180当然就是半年排行了。
OK,教程完毕。