WordPress 多站点下为登录页注入 Matomo 跟踪代码的完整方案(支持自动识别子站)
› 社区话题 › wordpress开发 › WordPress 多站点下为登录页注入 Matomo 跟踪代码的完整方案(支持自动识别子站)
标签: 多站点
- 该话题为空。

- 作者帖子
- 2025年7月14日 - 下午7:06 #670

追光管理员在搭建 WordPress 多站点(Multisite)时,往往需要为每个子站点独立记录访问行为。借助 Matomo(原名 Piwik)开源统计系统,你可以实现高精度、无隐私外泄的全站数据追踪。
本篇分享将介绍如何在 WordPress 多站点中为每个子站的登录页自动注入专属的 Matomo 追踪代码,并根据 blog_id 自动识别对应的 Matomo SiteID,做到完全自动化、统一管理。
? 场景说明
你搭建了一个 WordPress 多站点网络,多个子站共用一个主题
每个子站在 Matomo 中都有独立的 SiteID
你希望将追踪代码添加在 登录页底部(wp-login.php),且不破坏其他站点逻辑
✅ 实现方法:通过
login_footer
钩子注入
1️⃣ 在主题的
functions.php
中添加以下代码:
function insert_matomo_tracking_code_on_login_page() { $site_id = 10; // 默认主站 ID if ( is_multisite() ) { switch ( get_current_blog_id() ) { case 1: $site_id = 10; // 主站 break; case 4: $site_id = 11; // 子站1 break; case 6: $site_id = 12; // 子站2 break; case 7: $site_id = 13; // 子站3 break; } } ?> <!-- Matomo Tracking on Login Page --> <script> var _paq = window._paq = window._paq || []; _paq.push(["setCookieDomain", "*.newvfx.com"]); _paq.push(["setDomains", ["*.newvfx.com"]]); _paq.push(["enableCrossDomainLinking"]); _paq.push(['trackPageView']); _paq.push(['enableHeartBeatTimer', 15]); _paq.push(['trackAllContentImpressions']); _paq.push(['enableLinkTracking']); (function() { var u="https://data.newvfx.com/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '<?php echo esc_js($site_id); ?>']); var ucdn=(('https:' == document.location.protocol) ? 'https://img.newvfx.com/j/incdn/' : 'http://img.newvfx.com/j/incdn/'); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=ucdn+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Matomo --> <?php } add_action('login_footer', 'insert_matomo_tracking_code_on_login_page');? 工作原理解析
函数
作用
login_footer
WordPress 登录页底部钩子,专用于注入自定义 HTML/JS
get_current_blog_id()
获取当前站点(子站)ID
switch-case 结构
自动根据 blog_id 切换 Matomo 的 SiteID
_paq.push 数组
Matomo 的追踪配置命令
CDN 载入
使用你自己的 CDN img.newvfx.com 加载 matomo.js 脚本
✅ 效果验证方式
各子站后台访问 wp-login.php
打开浏览器开发者工具 → Network
检查是否加载了 matomo.php?idsite=X,SiteID 是否对应当前站点
? 可选增强建议
✅ 通过后台为每个子站设置 SiteID(更灵活)
如果未来子站增多,建议不要写死,而是为每个子站后台设置一个自定义字段:
$site_id = get_option('matomo_site_id', 10); // 默认主站 ID配合 Options Framework 或 Redux 添加一个选项即可。
? 结语
这个方法适用于以下场景:
WordPress 多站点架构
子站共用主题
每个子站在 Matomo 中是独立站点
需要细粒度追踪各站用户行为
借助这种动态注入方式,你可以在不改变站点结构的前提下实现全面的数据追踪自动化,尤其适合搭建在 Nginx + PHP-FPM + Redis 的现代 WordPress 集群。
- 作者帖子
- 在下方一键注册,登录后就可以回复啦。