使用代码替换wp-postviews插件实现文章统计、热门文章排行,保持原插件数据不丢失

看了下哼哼猪的去插件使用代码统计文章阅读的代码,结果会导致以前的数据失效,文章阅读数变为0重新开始统计。其实数据还在,只是失效了,如果不用的话就成为垃圾数据了。

那么简单修改下代码就可以继续使用原插件的数据了。

首先在主题文件functions.php加入统计和设置函数:



  1. // 文章阅读统计   

  2. function getPostViews($postID,$isRelated=false){   

  3.     $count_key = 'views';   

  4.     $count = get_post_meta($postID, $count_key, true);   

  5.     if(''==$count){   

  6.         delete_post_meta($postID, $count_key);   

  7.         add_post_meta($postID, $count_key, '0');   

  8.     }   

  9.     if($isRelated){   

  10.         echo $count.' +';   

  11.     }else{   

  12.         if(0==$count){   

  13.             echo "被围观0次";   

  14.         }else{   

  15.             echo '被围观'.$count.'次';   

  16.         }   

  17.     }   

  18. }   

  19. function setPostViews($postID) {   

  20. $count_key = 'views';   

  21. $count = get_post_meta($postID, $count_key, true);   

  22. if(''==$count){   

  23. $count = 0;   

  24. delete_post_meta($postID, $count_key);   

  25. add_post_meta($postID, $count_key, '0');   

  26. }else{   

  27. $count++;   

  28. update_post_meta($postID, $count_key, $count);   

  29.     }   

  30. }   



如果要在后台文章列表显示文章阅读次数,那就继续加入:



  1. add_filter('manage_posts_columns', 'posts_column_views');   

  2. add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);   

  3. function posts_column_views($defaults){   

  4.     $defaults['post_views'] = __('Views');   

  5.     return $defaults;   

  6. }   

  7. function posts_custom_column_views($column_name, $id){   

  8.     if($column_name === 'post_views'){   

  9.         echo getPostViews(get_the_ID(),true);   

  10.     }   

  11. }   



然后将如下统计和设置的函数放入到主题文件single.php的the_post()函数后面:



  1. <?php setPostViews(get_the_ID()); ?>  



主题和主题不一样但放置的位置一定是一样的,例如我的放置后的代码:



  1. <?php if (have_posts()) : while (have_posts()) : the_post(); ?><?php setPostViews(get_the_ID()); ?>  



在你想实现文章阅读次数的地方可以放入下面代码:



  1. <?php getPostViews(get_the_ID());?>   



通过上面的设置,就具有了显示文章阅读次数的功能了,另外可自行修改显示阅读次数的文字(在上面的functions.php代码中),你也可以删掉代码中的文字,在调用的地方手工随意加上文字。

接下来告诉大家,怎么实现最热文章和本文排行(根据阅读次数来排的),在functions.php加入:



  1. //热门文章排行   

  2. function the_most_views($days=0){   

  3.     global $wpdb, $post;   

  4.     if(0!=$days){   

  5.         $limit_date = current_time('timestamp') - ($days*86400);   

  6.         $limit_date = date("Y-m-d H:i:s",$limit_date);   

  7.         $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");   

  8.     }else{   

  9.         $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");   

  10.     }   

  11.     if($most_viewed){   

  12.             foreach ($most_viewed as $views) {   

  13.             echo '<li>';   

  14.             echo '<a href="'. get_permalink($views->ID).'" rel="bookmark">'.$views->post_title.'</a>';   

  15.             echo '</li>';   

  16.         }   

  17.     }else{   

  18.         echo '<li>当前设置没有文章可以显示。</li>';   

  19.     }    

  20. }   



在需要显示热门文章的地方调用:



  1. <?php the_most_views($days);?>   



里面的参数$days=0时是所有文章排行,30天的话就是月排行了,180当然就是半年排行了。
OK,教程完毕。

最后修改:2019 年 06 月 06 日 08 : 22
如果觉得我的文章对你有用,请随意赞赏

发表评论