WP笔记

通过Post Meta记录文章浏览次数

WordPress中记录文章浏览次数的插件最有名的要数wp postviews,这款插件很好用,它将文章浏览次数(post views)以自定义字段post meta的形式保存到数据库中,因此在编辑文章页面,如果在显示选项中开启自定义栏目,就能看到wp postviews在每篇文章中留下的足迹,修改浏览次数自然是小菜一碟。

但插件往往带有太多的功能,多到有些根本用不到,如果知道每个插件实现主要功能的核心方法,我们的自由度会更大,可以定制甚至抛开插件。wp postviews记录文章浏览次数的核心方法就是自定义字段。

用自定义字段记录文章浏览次数

不用插件,如何记录文章次数

插件也不过是创建了一个自定义字段记录文章次数,当文章刷新时更新一下这个字段,用代码实现道理相同,首先定义两个函数:

  • 用于记录文章浏览次数,每次刷新页面时都会更新自定义字段的函数setPostViews($postID)
  • 用于读取文章里浏览次数在页面上显示的代码getPostViews($postID)

代码放在主题的functions.php中


如何使用

打开single.php(如果是twentyeleven或者twentyten,放在content-single.php),将setPostViews($postID)放到主循环中


   ...

   ...

只要在主循环内部即可,如果要记录page的点击次数,按照相同的方法修改page.php(如果是twentyeleven或者twentyten,修改content-page.php)

如果你设置成功,打开某篇文章的编辑页面,就会看到上图所示的自定义字段post_views_count,修改这个字段的值就可以修改文章浏览次数,因为使用不同的自定义字段,和wp postviews不冲突。

7条评论

  1. Warning: Cannot modify header information – headers already sent by (output started at /home/thisis/public_html/wp-content/themes/inove/functions.php:597) in /home/thisis/public_html/wp-admin/theme-editor.php on line 103

    theme-editor.php 103 header(“Location: $location”);

    functions.php:597 就是添加进的代码的那行

    1. 你用的inove主题啊,我试了下没问题啊,两个函数写在functions.php里,single.php里面写调用代码,一切正常啊

      //single.php line 18-23
      <?php if ($comments || comments_open()) : ?>
      	<span class="addcomment"><a href="#respond"><?php _e('Leave a comment', 'inove'); ?></a></span>
      	<span class="comments"><a href="#comments"><?php _e('Go to comments', 'inove'); ?></a></span>
      <?php endif; ?>
      <span class="views"><?php setPostViews(get_the_ID()); echo getPostViews(get_the_ID()); ?></span>
      <div class="fixed"></div>

      看报错信息的话,问题是出在functions.php里,你用的什么编辑器?wordpress自带的在线编辑器吗?最好用notepad++或者dreamwaver编辑。

  2. ls的都是高手。
    我弄的时候出问题了

    把lz的代码复制进functions.php的文件最后,这部没出错
    但single.php这里添加进代码,保存就出错说是header什么的已经在functions.php输出了?就是我添加进的那段代码位置。

    求解?

  3. 不过,你这个代码太简洁了,很有效率,我很犹豫要不要采用你的方法。

    1. 如果把这段代码改成ajax存取数据,就可以用了,不会跟cache插件冲突,具体我还没弄过

    1. 肯定不支静态化的,这个计数就依赖于每次刷新页面写数据库,生成静态页面就没法写数据库了,得改用ajax的方式,自己写可以,或者用WP-PostViews +Ajax_the_views。WP Most Popular我没用过,多谢推荐,一会试试看

评论已关闭。