You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让WordPress插件在WP Rocket缓存页面时仍正常执行?

WP Rocket缓存下页面浏览量统计插件的执行解决方案

当WP Rocket启用静态缓存后,缓存页面会直接返回给访客,完全绕过WordPress核心的PHP执行流程,所以wp钩子、普通插件甚至MU插件的代码都不会触发——因为根本没运行WordPress。以下是可行的解决办法:

方法1:利用WP Rocket动态内容功能(官方推荐)

WP Rocket支持标记页面中部分内容为动态,不参与缓存,这部分的PHP代码会在每次请求时执行。

方式A:使用动态块注释

将统计逻辑的调用包裹在WP Rocket的动态块标记中,放在主题模板(比如footer.php)或者插件的输出位置:

<!-- wp:dynamic-block -->
<?php $plugin_public->track_page(); ?>
<!-- /wp:dynamic-block -->

确保WP Rocket设置的「高级」选项中已启用动态内容支持。

方式B:绑定到WP Rocket动态内容钩子

将统计方法挂到rocket_dynamic_content动作上,然后在页面中调用该动作:

// 在插件初始化时添加钩子
add_action('rocket_dynamic_content', [$plugin_public, 'track_page']);

接着在主题的footer.php或其他合适位置添加:

<?php do_action('rocket_dynamic_content'); ?>

WP Rocket会自动识别这个动作,跳过缓存并每次执行统计逻辑。

方法2:服务器端代理触发统计脚本

如果需要脱离WordPress流程执行统计,可以在服务器配置中,让所有缓存页面请求先触发统计脚本,再返回缓存内容。

Nginx配置示例

在站点的server区块中添加:

location ~* \.(html|htm)$ {
    # 先执行统计脚本
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 替换为你的PHP-FPM路径
    fastcgi_param SCRIPT_FILENAME /var/www/html/wp-content/plugins/your-plugin/tracking-script.php;
    fastcgi_param REQUEST_URI $request_uri;
    fastcgi_param REMOTE_ADDR $remote_addr;
    # 再返回缓存页面
    try_files $uri $uri/ /index.php?$args;
}

tracking-script.php中直接实现统计逻辑(比如记录当前URL、访客IP到数据库),无需依赖WordPress核心。

Apache配置示例

在站点根目录的.htaccess中添加:

RewriteEngine On
# 对缓存页面请求先触发统计脚本
RewriteCond %{REQUEST_FILENAME} \.(html|htm)$
RewriteRule ^(.*)$ /wp-content/plugins/your-plugin/tracking-script.php?uri=$1 [L,QSA]
# 保留WP Rocket原有的缓存规则

tracking-script.php处理完统计后,可通过readfile()输出缓存文件内容返回给访客。

方法3:修改WP Rocket缓存排除规则

如果你的统计只针对特定页面,可以将这些页面排除在WP Rocket缓存之外:

  • 进入WP Rocket设置的「缓存」选项卡
  • 在「从不缓存的URL」中添加目标页面的路径(比如/blog/*)
    这种方法适合页面数量少的场景,缺点是会失去缓存对这些页面的性能优化效果。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:28:19