免插件实现WordPress WP-PostViews 文章阅读次数

一般为Wordpress文章添加阅读次数统计,会用到wp-postviews或者wp-postviews-plus插件,这里分享两段不用插件实现Wordpress文章阅读次数的代码,供大家参考。厦门SEO

代码一:

一、首先将下面代码加到主题functions模版文件中:

  1. function getPostViews($postID){
  2.     $count_key = 'post_views_count';
  3.     $count = get_post_meta($postID$count_key, true);
  4.     if($count==''){
  5.         delete_post_meta($postID$count_key);
  6.         add_post_meta($postID$count_key, '0');
  7.         return "0 View";
  8.     }
  9.     return $count.' Views';
  10. }
  11. function setPostViews($postID) {
  12.     $count_key = 'post_views_count';
  13.     $count = get_post_meta($postID$count_key, true);
  14.     if($count==''){
  15.         $count = 0;
  16.         delete_post_meta($postID$count_key);
  17.         add_post_meta($postID$count_key, '0');
  18.     }else{
  19.         $count++;
  20.         update_post_meta($postID$count_key$count);
  21.     }
  22. }

二、接下来将下面代码加到主题single模版主循环的中:

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

也就是类似这句的下面

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

三、最后,将调用显示阅读次数代码加到single模版适当的位置:

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

如果想在其它位置显示阅读次数,可以将下面代码也加到functions模版中:

  1. remove_action('wp_head','adjacent_posts_rel_link_wp_head',10,0);

 

原文:Track post views without a plugin using post meta

代码二:

一、同样将下面代码加到主题functions模版文件中:

  1. //postviews
  2. function get_post_views ($post_id) {
  3.     $count_key = 'views';
  4.     $count = get_post_meta($post_id$count_key, true);
  5.     if ($count == '') {
  6.         delete_post_meta($post_id$count_key);
  7.         add_post_meta($post_id$count_key, '0');
  8.         $count = '0';
  9.     }
  10.     echo number_format_i18n($count);
  11. }
  12. function set_post_views () {
  13.     global $post;
  14.     $post_id = $post -> ID;
  15.     $count_key = 'views';
  16.     $count = get_post_meta($post_id$count_key, true);
  17.     if (is_single() || is_page()) {
  18.         if ($count == '') {
  19.             delete_post_meta($post_id$count_key);
  20.             add_post_meta($post_id$count_key, '0');
  21.         } else {
  22.             update_post_meta($post_id$count_key$count + 1);
  23.         }
  24.     }
  25. }
  26. add_action('get_header', 'set_post_views');

二、将调用显示阅读次数代码加到single模版适当的位置:

  1. <?php get_post_views($post -> ID); ?> views

调用显示阅读次数代码也可以加到其它模版文件的适当位置。

 

另外,HotNews主题想不用插件统计阅读次数并同时实现近期热门文章调用,需要将下面代码加加到functions模版上述代码的前面:

  1. ### WP-PostViews
  2. if(!function_exists('get_most_viewed')) {
  3.     function get_most_viewed($mode = ''$limit = 10, $chars = 0, $display = true) {
  4.         global $wpdb;
  5.         $views_options = get_option('views_options');
  6.         $where = '';
  7.         $temp = '';
  8.         $output = '';
  9.         if(!empty($mode) && $mode != 'both') {
  10.             $where = "post_type = '$mode'";
  11.         } else {
  12.             $where = '1=1';
  13.         }
  14.         $most_viewed = $wpdb->get_results("SELECT DISTINCT $wpdb->posts.*, (meta_value+0) AS views FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->postmeta.post_id = $wpdb->posts.ID WHERE post_date < '".current_time('mysql')."' AND $where AND post_status = 'publish' AND meta_key = 'views' AND post_password = '' ORDER BY views DESC LIMIT $limit");
  15.         if($most_viewed) {
  16.             foreach ($most_viewed as $post) {
  17.                 $post_views = intval($post->views);
  18.                 $post_title = get_the_title($post);
  19.                 if($chars > 0) {
  20.                     $post_title = snippet_text($post_title$chars);
  21.                 }
  22.                 $temp = stripslashes($views_options['most_viewed_template']);
  23.                 $temp = str_replace("%VIEW_COUNT%", number_format_i18n($post_views), $temp);
  24.                 $temp = str_replace("%POST_TITLE%"$post_title$temp);
  25.                 $temp = str_replace("%POST_EXCERPT%"$post_excerpt$temp);
  26.                 $temp = str_replace("%POST_CONTENT%"$post->post_content, $temp);
  27.                 $temp = str_replace("%POST_URL%", get_permalink($post), $temp);
  28.                 $output .= $temp;
  29.             }
  30.         } else {
  31.             $output = '<li>'.__('N/A', 'wp-postviews').'</li>'."\n";
  32.         }
  33.         if($display) {
  34.             echo $output;
  35.         } else {
  36.             return $output;
  37.         }
  38.     }
  39. }
  40. ### 按时间获得最受欢迎文章
  41. function get_timespan_most_viewed($mode = ''$limit = 10, $days = 7, $display = true) {
  42.     global $wpdb$post;
  43.     $limit_date = current_time('timestamp') - ($days*86400);
  44.     $limit_date = date("Y-m-d H:i:s",$limit_date);
  45.     $where = '';
  46.     $temp = '';
  47.     if(!empty($mode) && $mode != 'both') {
  48.         $where = "post_type = '$mode'";
  49.     } else {
  50.         $where = '1=1';
  51.     }
  52.     $most_viewed = $wpdb->get_results("SELECT $wpdb->posts.*, (meta_value+0) AS views FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->postmeta.post_id = $wpdb->posts.ID WHERE post_date < '".current_time('mysql')."' AND post_date > '".$limit_date."' AND $where AND post_status = 'publish' AND meta_key = 'views' AND post_password = '' ORDER  BY views DESC LIMIT $limit");
  53.     if($most_viewed) {
  54.         foreach ($most_viewed as $post) {
  55.             $post_title = get_the_title();
  56.             $post_views = intval($post->views);
  57.             $post_views = number_format($post_views);
  58.             $temp .= "<li><a href=\"".get_permalink()."\">$post_title</a>".__('', 'wp-postviews')."</li>";
  59.         }
  60.     } else {
  61.         $temp = '<li>'.__('N/A', 'wp-postviews').'</li>'."\n";
  62.     }
  63.     if($display) {
  64.         echo $temp;
  65.     } else {
  66.         return $temp;
  67.     }
  68. }

预见

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: