Files
laoyang c125388ab7 4.1.0 主题设置页加访问统计面板,接百度统计 API 直出后台 #33
新增 inc/theme-stat.php(约 1814 行),把百度统计的数据直接显示在
主题设置页,不用再跳去百度后台看。

主要设计决策:
- 凭据(API Key / Secret / refresh_token)存 wp-content/uploads/ 下
  独立文件(0600),不写 options 表、不在表单回显 —— 换主题/升级不丢
- 13 个指标全部实现,用户可在「面板显示哪些指标」里各别开关
  (每次 API 调用都占配额,只看几个数字的可以关掉其余)
- 面板走 AJAX 懒加载「先出壳、后取数」:同步渲染 8 个请求 ×5 秒超时
  会让设置页最坏卡 40 秒
- 缓存成功 1800 秒 / 失败 300 秒:接口挂了不至于每次刷新都等超时
- "--"(百度接口的"无数据")渲染成破折号,不转成 0 —— 否则
  "暂无数据"会被显示成"0 次访问"
- footer.php 的统计代码外面加埋点开关,关掉不停用代码本身

改动:
- inc/theme-stat.php   新建
- inc/theme-options.php 新增 8 个控件
- footer.php           统计代码套埋点开关
- functions.php        require 新模块
- style.css            版本号 4.0.0 → 4.1.0

验证:
- php -l 全量 98 文件 0 失败
- 正向判据 145/0,反证 19 组全抓到
- 真实接口连通性 10/0(OAuth 401 与 error_code 110 两种错误格式实测)
- 打包自检 82/0,其反证 15 组全抓到
2026-10-28 16:33:41 +08:00

96 lines
5.1 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 主题页脚
* @author Yongquan Yang <yangyq.net>
* @license MIT License
* @version 2020.04.12
*/
?>
<div class="k-footer">
<div class="f-toolbox">
<div class="gotop">
<div class="gotop-btn">
<span class="kicon i-up"></span>
</div>
</div>
<div class="search">
<span class="kicon i-find"></span>
<form class="search-form" role="search" method="get" action="<?php echo home_url('/'); ?>">
<input type="text" name="s" id="search" placeholder="<?php _e('搜点什么呢?', 'kratos'); ?>" style="display:none"/>
</form>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-12 text-center">
<p class="social">
<?php
$social = array('s_sina', 's_bilibili', 's_coding', 's_gitee', 's_twitter', 's_telegram', 's_linkedin', 's_youtube', 's_github', 's_stackflow', 's_email');
foreach ($social as $social) {
if (kratos_option($social)) {
echo '<a target="_blank" rel="nofollow" href="' . kratos_option($social . '_url') . '"><i class="kicon i-' . str_replace("s_", "", $social) . '"></i></a>';
}
}
?>
</p>
<?php
$sitename = get_bloginfo('name');
/* 版权行:优先用后台「页脚配置 - 版权信息」里填的内容。
早先这里是无条件硬编码,后台那个输入框填了也不生效 ——
用户在后台改了、前台毫无变化,是很容易被当成 bug 的
那种"功能失灵"。空值才回退到自动拼的默认文案。 */
$copy = kratos_option('s_copyright', '');
if (!is_string($copy) || trim($copy) === '') {
$copy = 'COPYRIGHT © ' . date('Y') . ' ' . $sitename . ' 版权所有';
}
/* 输出必须转义。这个值是后台管理员填的,但后台账号被盗
或者多人站点里有人权限被降,都会让这里变成注入点;
而且版权行里出现 <b> 之类也只会显示成怪异的样子。
换行保留:用户可能分行写。 */
echo '<p>' . nl2br(esc_html($copy)) . '</p>';
echo '<p>THEME <a href="https://git.yangyq.net/laoyang/wordpress-kratos-yang" target="_blank" rel="nofollow">KRATOS YANG</a> Modified BY <a href="https://yangyq.net" target="_blank" rel="nofollow">老杨</a></p>';
if (kratos_option('s_icp')) {
echo '<p><a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">' . kratos_option('s_icp') . '</a></p>';
}
if (kratos_option('s_gov')) {
echo '<p><a href="' . kratos_option('s_gov_link', '#') . '" target="_blank" rel="nofollow" ><i class="police-ico"></i>' . kratos_option('s_gov') . '</a></p>';
}
/* 统计脚本:内容由用户在「收录与统计 → 统计代码」里填,
开关由「埋点开关」控制(见 inc/theme-stat.php)。
开关与代码分离,是为了让"临时停掉统计"不必删代码 ——
删了之后想恢复就得重新去百度后台找那串 hash。 */
if (yang_stat_tracking_enabled() && kratos_option('seo_statistical')) {
echo '<p>' . kratos_option('seo_statistical') . '</p>';
}
/* 国旗:勾了「是否添加国旗」才显示。以前 src 直接取选项,
用户没上传地址就得到 <img src="">,页面上是一个破图图标。
逻辑抽到 yang_flag_block() 里,测试能直接测同一个函数,
不必"照着抄一遍"(抄件永远是对的,模板改坏了也发现不了)。 */
echo yang_flag_block();
?>
</div>
</div>
</div>
</div>
<?php wp_footer(); ?>
<?php
/**
* 这里原来有一段「Prism 代码高亮兜底」。
*
* 3.2.42 起已删除。原因:
* 代码高亮改由主题自研接管(inc/theme-highlight.php + highlight.js 自托管),
* 服务端就把每个 <pre> 规范成了卡片结构,前端 hljs 一次性上色完成。
* Prism 那段留着有两个害处:
* ① 它会对同一批 `<pre><code>` 再扫一遍,把 hljs 已经写好的
* `<span class="hljs-*">` 当文本重新包一层,产出嵌套 span,
* 首尾行高算错、行号对不齐;
* ② Prism 的 autoloader 会去拉 wp-editormd 的语言包,
* 而 wp-editormd 已被关停/可能被删,地址 404 时控制台报错。
*
* ⚠️ 如果将来要恢复 Prism,必须同时关掉 yang_hl_enabled(),
* 两套高亮器不能同时在一页里跑。
*/
?>
</body>
</html>