网站首页 » CMS » WordPress » 纯手工实现 WordPress 文章阅读量统计功能(非插件)
上一篇:
下一篇:

纯手工实现 WordPress 文章阅读量统计功能(非插件)

要想实现纯手工打造的文章阅读量功能,我们有必要先来了解实现这个功能的一些基本元素。下面我们先来简单的了解下有关 post meta 的几个函数。

WordPress 中有四个关于 post meta 的函数,他们分别是:get_post_meta()、update_post_meta()、delete_post_meta()、add_post_meta()。这四个函数分别用来检索、更新、删除、添加对应文章中的自定义字段的值,这些字段保存在 postmeta 表中。

基本语法

add_post_meta()

add_post_meta() 方法用于给文章或者页面添加自定义字段,基本套路:

add_post_meta( int $post_id, string $meta_key, mixed $meta_value, bool $unique = false )

四个参数作用如下:

  • $post_id:文章ID
  • $meta_key:为自定义字段名(key 键名)
  • $meta_value:key 值对应的值
  • $unique:若已有同名自定义字段,是否重复添加重名的自定义字段,false 为允许,true 为不允许(这里就得看情况设置了)。

添加成功返回 Meta ID,否则返回 false 。

get_post_meta()

获取指定文章自定义字段的值,基本套路:

get_post_meta( int $post_id, string $key = '', bool $single = false )

其中:

  • $post_id:为文章ID (如果在循环中可以用get_the_ID()来获取文章 ID)
  • $meta_key:为自定义字段名(key 键名)
  • $single:布尔值,true 以字符串返回,false 以数组的形式返回。

如果$key 没有设置(不存在),那么就会返回长度为0的字符串($single = true),或者返回一个空数组($single = false)。如果$key存在,那么就会返回 $key 键所对应的值。如果第三个参数设置为 false,则返回一个相同键的自定义字段对应值所组合成的一个有序(按照添加顺序)数组。

update_post_meta()

更新指定文章的自定义字段的值。基本套路如下:

update_post_meta( int $post_id, string $meta_key, mixed $meta_value, mixed $prev_value = '' )

其中:

  • $post_id:文章ID
  • $meta_key:为自定义字段名(key 键名)
  • $meta_value:自定义字段的新值,如果是一个数组,将会被序列化成字符串
  • $prev_value:要修改的自定义字段原来的值,用以区分多个同名的字段,如果省略,则指定文章下多个同名的字段值( key 值) 都将被更新

如果 meta 不存在,会自动调用add_post_meta() 方法自动添加自定义字段和值并返回新增字段的 meta_id,更新成功返回1(true),更新失败返回(空) false 。如果新值与旧值相同就不更新原有值。

delete_post_meta()

用于删除自定义字段,基本套路如下:

delete_post_meta( int $post_id, string $meta_key, mixed $meta_value = '' )

其中:

  • $post_id:文章ID
  • $meta_key:为自定义字段名(key 键名)
  • $meta_value:要删除的自定义字段的值,用来区分相同 key 的多个字段,如果留空,则当前文章下指定 key 的多个值都将被删除。

删除成功返回 true ,否则返回 false 。

实战

接下来我们通过上面的这几个方法实现一个纯手工打造的 wordpress 阅读量的统计功能。

PHP 代码
<?php
function getViews($post_id){
  $count_key = "views";
  $count_num = get_post_meta($post_id,$count_key,true);
  if($count_num == ""){
    $count_num = "0";//如果文章还没有记录过阅读量,那么直接返回"0"就好,也不需要记录到数据了
  }
  return $count_num;
}

function setViews($post_id){
  $count_key = "views";
  $count_num = get_post_meta($post_id,$count_key,true);
  if($count_num == ""){
    $count_num = "0";
    add_post_meta($post_id,$count_key,$count_num,true);//这里的 true 最好加上,不允许有重名字段,不过前面已经用了 if 判断了,所在不加也没什么问题。
  }else{
    $count_num = intval($count_num);//转成数字类型用于计算
    $count_num++;
    $count_num = strval($count_num);//转回字符串类型用于更新保存到数据中
    update_post_meta($post_id,$count_key,$count_num);
  }
}
?>

上面代码的setViews() 方法中的代码其实可以更加简单:

想更简洁请用这个方法
function setViews($post_id){
    $count_key = "views";
    $count_num = get_post_meta($post_id,$count_key,true);
    if($count_num == ""){
        $count_num = "0";
    }
    $count_num = intval($count_num);
    $count_num++;
    $count_num = strval($count_num);
    update_post_meta($post_id,$count_key,$count_num);
}

可以这么写是因为 update_post_meta() 方法在检测到这个自定义字段名不存在时会调用 add_post_meta() 方法,并且add_post_meta() 方法的最后一个参数 $unique 为 true(不允许重名)。

就那么简单,把上面的代码放到主题的 function.php 文件里。接下来就是在模板中合适的地方调用它们了。

在列表页中调用 getViews() 方法用于显示文章阅读量:

在这里添加
<header>
    <?php the_title( sprintf( '<h2><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' ); ?>
    <h6 class="post-info">
    <span class="post-tag">标签: <?php the_tags('','',''); ?></span> | <span>分类:<?php the_category(','); ?></span> | <a href="<?php echo get_permalink(); ?>/#comments">评论数:<?php $id=$post->ID; echo get_post($id)->comment_count;?> </a> 阅读量:<?php echo getViews(get_the_ID()) ?>
    </h6>
</header>

在文章详情页中调用 setViews() 方法用于计数阅读量:

在这里添加
<?php
    // Start the loop.
    while ( have_posts() ) : the_post(); setViews(get_the_ID());
        // Include the single post content template.
        get_template_part( 'template-parts/content', 'single' );
        // End of the loop.
    endwhile;
?>

这样就实现了一个文章阅读量计数功能。

 

  • 微信扫一扫,赏我

  • 支付宝扫一扫,赏我

声明

原创文章,不经本站同意,不得以任何形式转载,如有不便,请多多包涵!

本文永久链接:http://yunkus.com/wordpress-post-views-implementation/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论 END