kate522 ce21cc2b9b revert fa476af70e
revert refactor(pay): 充值商品以充值金额为唯一真值,移除销售金额与折扣

充值商品行此前是双值模型:price 充值金额决定到账、pay_price 销售金额决定支付,
pay_price 为 0 时回落到 price,否则即「付更少拿更多」的折扣。该模型把三处耦合在
一起——后台 schema 暴露销售金额输入、线格式首段携带支付额、下单时计价与到账分离。
只改其中一处就会出现「后台不再可配但前端仍在展示折扣」或「展示已合并但下单仍按
旧价扣款」的静默不一致,故本次三层一并收口,充值金额即实际支付金额。

后台 schema 有两份且必须同步:SPA 侧 recharge.js 负责渲染表单,PHP 侧 SchemaPayment
负责默认值与清洗。只改一份会让界面不再可配而默认值仍在写 pay_price。

线格式三段 "支付|到账|标题" 保持不动,仅为兼容历史已存的字符串配置:支付段不再读取
任何配置来源,恒等于充值金额,故历史配置里的折扣价会被忽略。旧数据无需迁移,pay_price
键留在库中只是不再被读取,从重建后的后台保存一次即自然消失。

行为变化(需知悉):
- 已配置折扣的站点,其用户将按充值金额全额支付,即对这些用户是涨价。这是「不做优惠
  和促销」的必然结果。
- parse_packages 的校验口径随之变松:有效性只由到账段决定,故 "abc|10|x" 这类首段
  非法、到账段合法的行会被解析为 10 元档,而旧实现两段都作金额校验、会丢弃。理由是
  支付段已不表达任何含义,因一个无用字段是垃圾就丢弃一条本来有效的档位只会让运营困惑。
  既有数据不受影响——旧格式化器写出的首段恒为数字,只有手改出的脏数据才可能命中。
  该取舍已写入方法文档。

- recharge.js / SchemaPayment:删除 pay_price 字段与三档默认值中的该键,help 去掉
  「同时支持设置折扣」
- PaymentRuntime::format_product_lines:不再读取 pay_price,支付段由充值金额充当
- BalanceServiceCharge::parse_packages:不再产出 pay_price 键,金额唯一来源为到账段
- BalanceServiceCharge::create_charge_order:支付额与到账额同源于 price
- credits-wallet.php:移除销售金额行、「省X」折扣徽标及仅服务折扣的差额计算
- BalanceServiceRest:仅注释改写,说明积分路径的 pay_price 是售价而非折扣
- 新增 tests/widget-system/recharge-product-price-contract.test.cjs:5 条跨层契约

范围边界:积分商品 pay_points_product 的 pay_price 是「积分|支付|标签」里的实际售价,
本身不含折扣语义,保留不动。契约测试以正向断言固定该边界,避免日后被误当作同类问题
一并删掉。

验证:新增契约测试 5 项通过;node --test 全量 375 项 / 375 通过(原 370 项);PHPUnit
44 项 / 106 断言通过;改动的 PHP 文件 php -l 全部通过。变异验证:把 create_charge_order
改回按 pay_price 计价、把 pay_price 重新注入模板,对应断言分别转红,证明回归测试拦得
住回退。另以反射调用真实代码做端到端执行验证 11 项全过,覆盖结构化数组 -> 线格式 ->
商品数组全链路、数组内残存 pay_price 被忽略、历史折扣字符串(98|100|旧折扣档 取 100)、
到账段为 0 或非法时跳过等边界。

部署提示:assets/admin/build 为部署时构建、未入库,后台表单的改动需在目标机执行
cd assets/admin && npm ci && npm run build 后才会生效。前端 credits.js 走 filemtime
版本号,无需手工清缓存。
2026-09-19 03:25:12 +00:00
2026-09-05 22:28:19 +08:00
2026-09-19 03:25:12 +00:00
2026-09-19 03:25:12 +00:00
2026-09-19 03:25:12 +00:00
2026-09-19 03:25:12 +00:00
2026-08-17 20:14:22 +08:00
2026-08-17 19:46:17 +08:00
2026-08-17 19:46:17 +08:00
2026-07-03 22:50:34 +08:00
2026-08-29 22:03:48 +08:00
2026-07-03 22:50:34 +08:00
2026-08-23 17:07:55 +08:00
2026-08-25 05:33:01 +08:00

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 后再访问站点。

方式一:直接上传(推荐)

  1. 将整个 AKSRT-theme 文件夹上传到 wp-content/themes/
  2. 在服务器主题目录执行上一节的 composer install(若打包时已带上完整 vendor/ 且已 dump-autoload,可跳过)
  3. 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.php
    • class-aksrt-settings-post-display.php
    • class-aksrt-settings-home-cms.php
    • class-aksrt-settings-user-runtime.php
    • class-aksrt-settings-integration.php
    • class-aksrt-settings-display-runtime.php
    • class-aksrt-settings-extension-runtime.php
    • class-aksrt-settings-credits-runtime.php
    • class-aksrt-settings-category-runtime.php
    • class-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 QQ Google 微博 微信开放平台 微信公众号
✅ ✅ ✅ ✅ ✅ ✅ ✅

回调地址格式

直连 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)

S
Description
WordPress主题AKSRT
Readme
25 MiB
Languages
PHP 50.2%
JavaScript 33.2%
CSS 13.6%
Vue 3%