WordPress 文章浏览量统计插件WP-PostViews缓存后动态调用使用说明

社区话题 wordpress开发 WordPress 文章浏览量统计插件WP-PostViews缓存后动态调用使用说明

9
  • 该话题为空。
正在查看 0 条回复
  • 作者
    帖子
    • #1483

      追光
      管理员

      WP-PostViews 是一款轻量级的 WordPress 文章浏览量统计插件,支持在文章、页面中显示浏览次数,并提供最热门/最少浏览文章列表功能。本版本基于官方 2.0.0 核心代码适配,完美兼容 PHP 8.0+ 和 WordPress 6.7,同时解决了静态缓存环境下浏览量无法实时更新的问题。

      WP-PostViews 现代化增强版:WordPress 浏览量实时统计插件(完美适配静态缓存与 PHP 8)

      安装要求

      WordPress 6.0 及以上(推荐 6.7+)
      PHP 7.4 及以上(推荐 PHP 8.0+)
      如使用静态缓存插件(WP-Rocket、W3 Total Cache 等),需在 `wp-config.php` 中确认存在 `define(‘WP_CACHE’, true);`

      基本用法

      方式一:短代码(适用于区块编辑器/任意位置)

      在文章内容或页面中直接插入:

      9 // 显示当前文章浏览量
      0 // 显示指定 ID 文章的浏览量

      方式二:PHP 模板标签(适用于经典主题)

      在主题的 `single.php`、`page.php`、`index.php` 等文件的循环内调用:

      php
      <span class="realtime-views" data-post-id="<?php echo get_the_ID(); ?>">
          <?php if ( function_exists( 'the_views' ) ) { the_views(); } ?>
      </span>

      > 注意:外层 `` 的 `data-post-id` 属性是必须的,用于缓存环境下的实时刷新定位。

      缓存环境实时刷新配置

      如果你使用了静态缓存插件(页面被生成 HTML 文件),浏览量无法在 PHP 阶段更新,需要配合以下 JS 代码实现前端实时刷新。将代码添加到主题的 `footer.php` 或全局 JS 文件中:

      javascript
      document.addEventListener('postviews:updated', function(event) {
          const postId = event.detail.postId;
          const newViews = parseInt(event.detail.views, 10);
          const target = document.querySelector(`.realtime-views[data-post-id="${postId}"]`);
          
          if (target) {
              const formatted = newViews.toLocaleString();
              target.innerHTML = target.innerHTML.replace(/\d[\d,]*/, formatted);
          }
      });

      该代码监听插件派发的 `postviews:updated` 事件,自动将页面上的旧数字替换为最新值,支持千位分隔符,兼容任何语言模板。

      缓存报 403 错误的解决方案

      若开启静态缓存后 AJAX 请求返回 403,说明 Nonce 安全令牌被缓存过期。在主题的 `functions.php` 中添加以下代码即可绕过:

      php

      add_action('wp_ajax_nopriv_wp_postviews', 'fix_postviews_cache_nonce', 1);
      function fix_postviews_cache_nonce() {
          remove_all_actions('wp_ajax_nopriv_wp_postviews');
          if (isset($_POST['postviews_id'])) {
              $post_id = intval($_POST['postviews_id']);
              if ($post_id > 0) {
                  $views = intval(get_post_meta($post_id, 'views', true)) + 1;
                  update_post_meta($post_id, 'views', $views);
                  wp_send_json_success(['views' => $views, 'postId' => $post_id]);
              }
          }
          wp_die();
      }

      后台设置

      进入 设置 → PostViews,可配置:

      统计对象(所有人/仅游客/仅登录用户)
      排除爬虫/机器人
      缓存模式下是否启用 AJAX 统计
      浏览量显示模板(支持 `%VIEW_COUNT%`、`%VIEW_COUNT_ROUNDED%`)

      常见问题

      Q:升级后浏览量数据会丢失吗?
      A:不会。数据存储方式未变(`postmeta` 表的 `views` 字段),无缝兼容。

      Q:为什么列表页数字不实时跳动?
      A:插件仅在单篇文章详情页触发 AJAX 计数。列表页显示的是缓存中的静态数字,需等缓存刷新后才会更新。

      Q:主题中原来用 `the_views()` 的地方还能用吗?
      A:可以。但建议按照上述格式添加 `data-post-id` 包裹,以支持实时刷新。

正在查看 0 条回复
  • 在下方一键注册,登录后就可以回复啦。