北极寒流 » 网络资源 » 免插件实现WordPress文章浏览次数刷新不增加 - 2018.06.06

免插件实现WordPress文章浏览次数刷新不增加

wordpress显示浏览次数,很多人都是安装WP-Postviews插件来实现的。不过,其实不用插件也可以实现显示WordPress浏览次数。

非插件统计文章浏览次数

在主题的 functions.php文件的最后一个 ?> 前面添加下面的代码:

/* 访问计数 */
function record_visitors()
{
    if (is_singular())
    {
      global $post;
      $post_ID = $post->ID;
      if($post_ID)
      {
          $post_views = (int)get_post_meta($post_ID, 'views', true);
          if(!update_post_meta($post_ID, 'views', ($post_views+1)))
          {
            add_post_meta($post_ID, 'views', 1, true);
          }
      }
    }
}
add_action('wp_head', 'record_visitors');
/// 函数名称:post_views
/// 函数作用:取得文章的阅读次数
function post_views($before = '(点击 ', $after = ' 次)', $echo = 1)
{
  global $post;
  $post_ID = $post->ID;
  $views = (int)get_post_meta($post_ID, 'views', true);
  if ($echo) echo $before, number_format($views), $after;
  else return $views;
}

在需要显示该统计次数的地方(一般是single模板内)使用下面的代码调用:

阅读:<?php post_views(' ', ' 次'); ?>
不过,上面的代码有个弊端,就是当用户不停的刷新页面时,不但浏览数会狂增,还会给数据库带来负担。下面是改进版。

非插件统计文章浏览次数(带cookie时间限制)

function record_visitors() {

    if(is_singular()) {

        global $post;

        $post_ID=$post->ID;

        if($post_ID) {

            if(isset($_COOKIE['views' . $post_id . COOKIEHASH])&& $_COOKIE['views' . $post_id . COOKIEHASH]=='1')

                return;

            $post_views=(int) get_post_meta($post_ID, 'views', true);

            if(!update_post_meta($post_ID, 'views', ($post_views+1))) {

                add_post_meta($post_ID, 'views', 1, true);

            }

            setcookie('views'.$post_id.COOKIEHASH,'1',time() + 3600 * 24, COOKIEPATH,COOKIE_DOMAIN);//设置cookie过期间隔为1天

            //setcookie('views'.$post_id.COOKIEHASH,'1',0, COOKIEPATH,COOKIE_DOMAIN);//设置关闭浏览器cookie即过期

        }

    }

}

add_action('wp_head', 'record_visitors');

function post_views($before = '浏览', $after = '次', $echo = 1) {

    global $post;

    $post_ID=$post->ID;

    $views=(int) get_post_meta($post_ID, 'views', true);

    if($echo)

        echo $before, number_format($views), $after;

    else

        return $views;

}

上面的代码默认是cookie有效期为1天,意思是你一天内打开同一页面,无论如何刷新,浏览次数都不会变的(除非你清空cookie)。

调用方式:在需要显示该统计次数的地方(一般是single模板内)使用下面的代码调用:

<?php if (function_exists('post_views')) post_views(); ?>

06

免插件实现WordPress文章浏览次数刷新不增加

分享到: