纯代码给wordpress网站曾加基础流量分析功能
一个完整的WordPress网站流量分析功能代码,可以直接添加到你的主题文件中。这个方案使用原生JavaScript实现,无需额外插件,可以统计页面浏览量、访客来源等基础数据。
wp-analytics.js
// WordPress基础流量分析脚本
(function() {
// 配置项
const config = {
localStorageKey: 'wp_analytics_data',
maxRecords: 1000, // 最大记录数
sessionTimeout: 30 * 60 * 1000, // 30分钟会话超时(毫秒)
trackPageViews: true,
trackReferrers: true,
trackDeviceInfo: true
};
// 初始化数据存储
let analyticsData = JSON.parse(localStorage.getItem(config.localStorageKey)) || {
pageViews: 0,
uniqueVisitors: 0,
sessions: 0,
referrers: {},
devices: {},
pages: {},
lastVisit: null,
currentSession: null
};
// 检查是否是新会话
function isNewSession() {
const now = new Date().getTime();
if (!analyticsData.currentSession ||
(now - analyticsData.currentSession.startTime) > config.sessionTimeout) {
return true;
}
return false;
}
// 开始新会话
function startNewSession() {
const now = new Date().getTime();
analyticsData.currentSession = {
startTime: now,
sessionId: 'sess_' + Math.random().toString(36).substr(2, 9)
};
analyticsData.sessions++;
// 检查是否是新访客
const visitorId = localStorage.getItem('wp_visitor_id');
if (!visitorId) {
const newVisitorId = 'vis_' + Math.random().toString(36).substr(2, 9);
localStorage.setItem('wp_visitor_id', newVisitorId);
analyticsData.uniqueVisitors++;
}
}
// 记录页面浏览
function trackPageView() {
if (!config.trackPageViews) return;
analyticsData.pageViews++;
// 记录当前页面
const pageUrl = window.location.pathname;
analyticsData.pages[pageUrl] = (analyticsData.pages[pageUrl] || 0) + 1;
// 记录设备信息
if (config.trackDeviceInfo) {
const deviceType = getDeviceType();
analyticsData.devices[deviceType] = (analyticsData.devices[deviceType] || 0) + 1;
}
// 记录来源
if (config.trackReferrers && document.referrer) {
const referrer = new URL(document.referrer).hostname;
if (referrer !== window.location.hostname) {
analyticsData.referrers[referrer] = (analyticsData.referrers[referrer] || 0) + 1;
}
}
// 更新最后访问时间
analyticsData.lastVisit = new Date().toISOString();
// 保存数据
localStorage.setItem(config.localStorageKey, JSON.stringify(analyticsData));
}
// 获取设备类型
function getDeviceType() {
const userAgent = navigator.userAgent;
if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(userAgent)) {
return 'Tablet';
}
if (/Mobile|Android|iP(hone|od)|IEMobile|BlackBerry|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(userAgent)) {
return 'Mobile';
}
return 'Desktop';
}
// 初始化
if (isNewSession()) {
startNewSession();
}
trackPageView();
// 提供简单的数据访问接口
window.WPAnalytics = {
getStats: function() {
return {
totalViews: analyticsData.pageViews,
uniqueVisitors: analyticsData.uniqueVisitors,
sessions: analyticsData.sessions,
lastVisit: analyticsData.lastVisit
};
},
getPageStats: function() {
return analyticsData.pages;
},
getReferrerStats: function() {
return analyticsData.referrers;
},
getDeviceStats: function() {
return analyticsData.devices;
}
};
})();
analytics-display.php
<?php
/**
* WordPress流量数据显示面板
* 添加到主题的functions.php或创建为独立插件
*/
function wp_analytics_dashboard() {
// 确保只在管理员界面显示
if (!current_user_can('manage_options')) {
return;
}
// 添加管理菜单项
add_menu_page(
'网站流量统计',
'流量统计',
'manage_options',
'wp-analytics',
'wp_analytics_display_page',
'dashicons-chart-bar',
6
);
}
add_action('admin_menu', 'wp_analytics_dashboard');
function wp_analytics_display_page() {
?>
<div class="wrap">
<h1>网站流量统计</h1>
<div class="wp-analytics-container">
<div class="wp-analytics-stats-grid">
<div class="stat-card">
<h3>总浏览量</h3>
<p id="total-views">加载中...</p>
</div>
<div class="stat-card">
<h3>独立访客</h3>
<p id="unique-visitors">加载中...</p>
</div>
<div class="stat-card">
<h3>会话数</h3>
<p id="total-sessions">加载中...</p>
</div>
<div class="stat-card">
<h3>最后访问</h3>
<p id="last-visit">加载中...</p>
</div>
</div>
<div class="wp-analytics-charts">
<div class="chart-container">
<h3>页面浏览量TOP 10</h3>
<div id="pages-chart"></div>
</div>
<div class="chart-container">
<h3>流量来源TOP 10</h3>
<div id="referrers-chart"></div>
</div>
<div class="chart-container">
<h3>设备分布</h3>
<div id="devices-chart"></div>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
// 获取统计数据
const stats = WPAnalytics.getStats();
document.getElementById('total-views').textContent = stats.totalViews;
document.getElementById('unique-visitors').textContent = stats.uniqueVisitors;
document.getElementById('total-sessions').textContent = stats.sessions;
document.getElementById('last-visit').textContent = stats.lastVisit ? new Date(stats.lastVisit).toLocaleString() : '无记录';
// 简单图表显示(实际项目中可以使用Chart.js等库)
displayTopItems(WPAnalytics.getPageStats(), 'pages-chart');
displayTopItems(WPAnalytics.getReferrerStats(), 'referrers-chart');
displayPieChart(WPAnalytics.getDeviceStats(), 'devices-chart');
function displayTopItems(data, elementId) {
const items = Object.entries(data)
.sort((a, b) => b[1] - a[1])
.slice(0, 10);
let html = '<ol>';
items.forEach(([key, value]) => {
html += `<li>${key}: <strong>${value}</strong></li>`;
});
html += '</ol>';
document.getElementById(elementId).innerHTML = html;
}
function displayPieChart(data, elementId) {
let html = '<ul>';
Object.entries(data).forEach(([key, value]) => {
html += `<li>${key}: <strong>${value}</strong></li>`;
});
html += '</ul>';
document.getElementById(elementId).innerHTML = html;
}
});
</script>
<style>
.wp-analytics-container {
margin-top: 20px;
}
.wp-analytics-stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
margin-bottom: 30px;
}
.stat-card {
background: #fff;
padding: 20px;
border-radius: 4px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.stat-card h3 {
margin-top: 0;
color: #666;
font-size: 14px;
}
.stat-card p {
font-size: 24px;
margin: 10px 0 0;
font-weight: bold;
}
.wp-analytics-charts {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
.chart-container {
background: #fff;
padding: 20px;
border-radius: 4px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.chart-container h3 {
margin-top: 0;
}
</style>
<?php
}
// 在WordPress中加载分析脚本
function enqueue_wp_analytics_script() {
wp_enqueue_script(
'wp-analytics',
get_template_directory_uri() . '/wp-analytics.js',
array(),
'1.0.0',
true
);
}
add_action('wp_enqueue_scripts', 'enqueue_wp_analytics_script');

- 流量统计脚本(wp-analytics.js)功能:
- 使用localStorage存储访问数据,无需数据库
- 跟踪页面浏览量、独立访客、会话数
- 记录访问来源(referrer)和用户设备类型
- 自动区分新访客和回访访客
- 提供JavaScript API访问统计数据
- 数据显示面板(analytics-display.php)功能:
- 在WordPress后台添加流量统计菜单
- 显示核心指标:总浏览量、独立访客等
- 展示页面浏览量TOP10、流量来源TOP10
- 可视化设备类型分布
- 响应式设计,适配不同屏幕
使用方法:
- 将wp-analytics.js上传到你的WordPress主题目录
- 将analytics-display.php代码添加到主题的functions.php文件
- 访问WordPress后台,左侧菜单会新增”流量统计”选项
这个方案完全基于前端技术实现,不依赖服务器配置或数据库,适合WordPress初学者使用。数据存储在访问者的浏览器中,管理员可以在后台查看汇总统计。
优点
隐私友好
所有数据存储在用户浏览器本地(localStorage),不收集个人身份信息,符合GDPR等数据保护法规要求
相比Google Analytics等第三方服务,避免了用户数据被商业公司收集的风险
轻量高效
纯前端实现无需数据库查询,脚本体积小于1KB,对网站性能影响极小
原生JavaScript实现,兼容所有现代浏览器且无需依赖第三方库
数据自主可控
所有统计数据存储在网站本地,避免依赖外部服务可能带来的数据中断风险
管理员可直接通过WordPress后台查看数据,无需登录第三方平台
开发成本低
无需购买付费插件或服务,适合预算有限的个人网站
代码结构清晰易于修改,可根据需要扩展跟踪维度
缺点
数据持久性有限
依赖浏览器localStorage,用户清除缓存后历史数据会丢失
无法实现跨设备/跨浏览器的用户行为追踪
功能相对基础
缺少高级分析功能如用户行为路径、转化漏斗等专业分析维度
实时数据处理能力有限,不适合高流量商业网站
数据可视化简单
后台仪表盘仅提供基础表格展示,缺乏专业的数据图表
需要额外开发才能实现数据导出或定期报告功能
维护成本存在
需手动处理代码更新,存在与WordPress核心版本兼容性问题
缺少专业插件的自动更新和维护保障机制
建议中小型内容网站优先采用此方案,而电商等高价值转化场景建议配合专业分析工具使用。如需增强功能,可参考Koko Analytics插件的设计思路进行扩展。