WordPress 文章浏览量统计插件WP-PostViews缓存后动态调用使用说明
› 社区话题 › wordpress开发 › WordPress 文章浏览量统计插件WP-PostViews缓存后动态调用使用说明
- 该话题为空。
- 作者帖子
- 2026年8月15日 - 下午8:53 #1483

追光管理员WP-PostViews 是一款轻量级的 WordPress 文章浏览量统计插件,支持在文章、页面中显示浏览次数,并提供最热门/最少浏览文章列表功能。本版本基于官方 2.0.0 核心代码适配,完美兼容 PHP 8.0+ 和 WordPress 6.7,同时解决了静态缓存环境下浏览量无法实时更新的问题。
安装要求
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` 包裹,以支持实时刷新。
- 作者帖子
- 在下方一键注册,登录后就可以回复啦。