.orderby-but 从「无尺寸 inline 宿主 + 依赖绝对定位静态位置 + 固定 translateY(-3px)/6px」改为「零尺寸 inline-block 宿主 + bottom 锚定 + translateY(50%)」。 原理:空 inline-block 的基线即其下边缘,会与同行文字基线对齐,于是箭头盒可用 bottom 精确锚定到「基线以上 N em」;translateY(50%) 抵消箭头自身高度,使盒中心恒等于 bottom 值, 与 dashicons 盒高无关。两枚箭头中心分别落在基线以上 .725em / .075em,对称于文字视觉中心。 旧写法的问题:绝对定位元素未指定 top/bottom 时,其位置来自静态位置(容器内容盒顶部), 该值与表头字体/行高联动;在真实后台 CJK 字体度量下整体偏下。 量测(无头 Chrome + 真实 wp-admin common.css/list-tables.css + 真实表头标记): - 旧写法:箭头簇中心相对文字中心 +2.0px(复现用户反馈的「偏下一点」) - 新写法:-0.09px;两箭头相对文字中心 -4.64 / +4.46,居中对称 - 表头行高两版均为 36.59px,无行高副作用 契约测试同步收紧:断言 bottom 锚定写法,并禁止回归到无 bottom 的固定像素位移。
AKSRT WordPress Theme
版本: 3.4.0-dev | 架构: 原生 PHP + WordPress (非 headless) 要求: WordPress >= 6.4 | PHP >= 8.1
项目概述
AKSRT 是一款现代化的 WordPress 主题,采用原生 WordPress 主题架构开发(PHP + HTML + CSS + JavaScript),不依赖 REST API 进行前端渲染。
核心特性
- 自定义管理面板 (SPA) — Vue3 + Vite + Naive UI 的 12 个一级业务域后台
- 统一设置契约 — Schema 驱动表单、域控制器、导入导出、按域重置、迁移状态与健康检查
- 支付/下载主线 — 下载/付费内容中心、充值/VIP/分成/返佣/网关结构、10 分钟下载 token
- 用户与增长 — 统一登录注册、OAuth 登录、签到奖励、邀请奖励、等级/徽章/认证/举报结构
- 内容与交互 — 首页模块化、归档/搜索/404、单篇资源页、评论审核与通知中心
- 运维工具 — 配置导出导入、dry-run 校验、备份、数据库与环境诊断
- 自定义页面模板:About / Friends / Login / Profile / Register
- 响应式设计
文件结构
AKSRT-theme/
├── functions.php # 入口:常量 + Composer autoload + bootstrap + 单例 init
├── style.css # WordPress 主题声明头
├── composer.json # 第三方依赖 + 主题 PSR-4(AKSRT\ → src/)
│
├── *.php # WP 核心模板保留根目录
│
├── src/ # Composer PSR-4 类型根(namespace AKSRT\)
│ ├── Admin/ # SPA 编排 + 域控制器 + Schema + Native ops
│ ├── Auth/ # 登录 / OAuth / 审核 / 邮箱
│ ├── Content/ # 下载 token / 付费内容 / VIP / 可见性
│ ├── Core/ # 主题壳层(Setup / Scripts / Templates / SEO / DB…)
│ ├── Credits/ # 积分 / 钱包 / 签到 / 邀请
│ ├── Extensions/ # MeiliSearch / 推送 / IP / 内容审核
│ ├── Frontend/ # 前端渲染辅助
│ ├── Messages/ # 站内信 / 公告 / 举报
│ ├── Payment/ # 订单 / 网关 / 售后 / 物流 / 分成
│ │ └── Gateways/ # 支付宝 / 微信 / PayPal / Stripe
│ ├── Settings/ # 设置门面 + 运行时 delegates
│ ├── Shop/ # 商城服务 + meta box
│ ├── Sms/ # 短信编排 + 云厂商 adapter
│ ├── Ai/ # AI / SEO prompt
│ ├── User/ # 用户中心 / 主页 / 徽章 / 等级 / 关注
│ └── Widgets/ # 小工具类(一类一文件)
│
├── inc/ # 过程式引导与辅助
│ ├── bootstrap.php # helpers + modules + core-hooks(类由 Composer 加载)
│ ├── core-hooks.php # 核心功能钩子
│ ├── modules/ # 非类过程式模块(captcha / user-parts / widgets 注册…)
│ └── helpers/ # 辅助函数
│
├── templates/ # 模板目录(与 inc/ 隔离)
│ ├── pages/ # 自定义页面模板
│ │ ├── page-about.php # 关于页面
│ │ ├── page-friends.php # 友链墙
│ │ ├── page-sign.php # 唯一登录注册页面
│ │ ├── page-profile.php # 用户中心
│ │
│ └── parts/ # 可复用模板片段
│ ├── content-post-card.php # 文章卡片组件
│ ├── post-card.php # 文章卡片(旧版兼容)
│ └── comments.php # 评论列表组件
│
└── assets/ # 静态资源(前后端隔离)
├── css/
│ ├── frontend/ # 前端样式
│ │ ├── main.css # 主样式表
│ │ └── variables.css # CSS 变量(颜色/间距/字体)
│ ├── admin/ # 后台专用样式
│ │ └── admin-panel.css # SPA 容器面板样式
│ └── shared/ # 前后端共用
│ └── captcha.css # 人机验证样式
│
├── js/
│ └── main.js # 前端交互脚本
│
├── img/
│ └── icons/ # 本地 SVG 图标(17个)
│
└── admin/ # Vue3 SPA 后台构建产物
└── build/ # Vite 构建输出(ESM)
安装方式
主题类型(AKSRT\…)通过 Composer PSR-4 从 src/ 自动加载;vendor/ 不进 Git。部署或更新主题后必须在主题根目录生成 autoload,否则会出现 Class "AKSRT\Core\DomainModel" not found 等致命错误。
前置:Composer(必做)
在主题目录(含 composer.json 的那一层)执行:
# 首次或依赖变更后(安装第三方库 + 生成主题 PSR-4)
composer install --no-dev --optimize-autoloader
# 仅 composer.json autoload 映射变更时(无需重下包)
composer dump-autoload -o
确认:
php -r "require 'vendor/autoload.php'; echo class_exists('AKSRT\\\\Core\\\\DomainModel') ? \"ok\\n\" : \"missing\\n\";"
应输出 ok。若 PHP 开启了 OPcache,重载 php-fpm / 重启 PHP 后再访问站点。
方式一:直接上传(推荐)
- 将整个
AKSRT-theme文件夹上传到wp-content/themes/ - 在服务器主题目录执行上一节的
composer install(若打包时已带上完整vendor/且已dump-autoload,可跳过) - WordPress 后台 → 外观 → 主题 → 找到 AKSRT → 激活
方式二:ZIP 打包上传
压缩为 .zip 后通过 WordPress 后台上传;上传后同样需要在服务器主题目录生成/校验 Composer autoload(见上)。
生产急救(已白屏 / DomainModel not found)
SSH 进入主题目录后:
cd /path/to/wp-content/themes/AKsrt-theme # 以实际路径为准
composer install --no-dev --optimize-autoloader
# 或仅刷新映射:composer dump-autoload -o
# 可选:reload php-fpm / 清 OPcache
使用指南
1. 创建基础页面
激活主题后创建以下页面并选择对应模板:
| 页面名称 | 选择模板 | 路径建议 |
|---|---|---|
| 关于我 | About | /about |
| 友情链接 | Friends | /friends |
| 个人中心 | Profile | /profile |
登录/注册页面会自动检测,无需手动创建。
2. 后台配置路径
WordPress 后台左侧 Admin Bar → ⚡ AKSRT 主题设置
或直接访问:/wp-admin/admin.php?page=aksrt-settings
3. 当前后台域
全局&功能:品牌、布局、搜索、自定义代码、邮件页面&显示:首页、分类、标签、用户主页、404/搜索结果文章&列表:列表、缩略图、单篇、筛选、评论功能&权限:审核、验证码、评论/附件/下载权限用户&互动:登录注册、OAuth、通知、签到、认证、等级、徽章、举报、积分支付&付费:下载/付费内容中心、余额充值、VIP、创作分成、推广返佣、收款接口备份&导入:导入导出、健康检查、迁移状态、备份与更新
开发说明
Settings Facade 分层
AKSRT_Settings仍是主题设置的唯一静态 facade,外部调用方式保持AKSRT_Settings::*- 具体运行时 getter 已按领域拆分到
inc/classes/settings/,例如:class-aksrt-settings-theme-search.phpclass-aksrt-settings-post-display.phpclass-aksrt-settings-home-cms.phpclass-aksrt-settings-user-runtime.phpclass-aksrt-settings-integration.phpclass-aksrt-settings-display-runtime.phpclass-aksrt-settings-extension-runtime.phpclass-aksrt-settings-credits-runtime.phpclass-aksrt-settings-category-runtime.phpclass-aksrt-settings-capabilities.php
inc/bootstrap.php会先加载settings/class-aksrt-settings.php,再按领域加载这些 delegate 类- 新增设置运行时逻辑时,优先放入对应 settings 子类;仅把聚合输出、统一入口和跨域装配保留在
AKSRT_Settings
添加新辅助函数
将函数文件放入 inc/helpers/,在 bootstrap.php 阶段1 加载。
添加新页面模板
将 page-{name}.php 放入 templates/pages/,并在 class-aksrt-templates.php 中注册。
CSS 组织规范
| 目录 | 用途 | 加载场景 |
|---|---|---|
css/frontend/ |
前端公共样式 | 所有前台页面 |
css/admin/ |
后台管理样式 | 仅 AKSRT 设置页面 |
css/shared/ |
共用组件样式 | 前后端按需加载(如验证码) |
OAuth 第三方登录配置
支持的平台
| GitHub | Gitee | 微博 | 微信开放平台 | 微信公众号 | ||
|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
回调地址格式
直连 OAuth:
https://你的域名.com/oauth/callback/
代理服务端按平台配置:
https://代理服务端域名.com/oauth/proxy/{provider}/callback/
彩虹聚合登录:
https://你的域名.com/oauth/clogin/callback/
技术栈
- 后端: PHP 8.1+ / WordPress 6.4+
- 前端: HTML5 / CSS3 (CSS Variables) / Vanilla JavaScript
- 图标: 本地 SVG 图标 + 按需加载
- 字体: Manrope + Source Serif 4 (Google Fonts)
- 后台: Vue3 + Vite + NaiveUI (SPA)
许可证
MIT License
作者
Kate (Lexo0522)