docs: add creator center PRD

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-06 15:03:10 +08:00
co-authored by Claude Fable 5
parent d86125b130
commit cba016bc7a
+193
View File
@@ -0,0 +1,193 @@
# PRD:用户中心创作中心与文章价格表
> 来源:用户指令(2026-08-06)。参考主题:`C:\Users\Xing\Desktop\zibll`。
## 背景与问题
AKSRT 当前用户中心的“我的文章”主要承担文章列表展示,前台投稿页已经具备文章编辑、草稿、审核、封面、分类、标签和付费配置能力,但这些能力分散在用户中心与独立投稿页之间,缺少参考 zibll 的完整创作工作台体验:
- 创作者无法在一个清晰的工作区中快速查看文章状态、进入新建/编辑、处理草稿和待审内容。
- 文章管理信息密度和操作反馈不足,无法快速定位最近编辑、已发布、草稿、待审和私密文章。
- 知识付费主题不需要 zibll 的商品/规格编辑,但需要可快速维护文章的免费、现金、积分及会员价格。
- 价格规则、付费阅读/付费资源和下载资源已经存在于 AKSRT 的投稿保存链路中;若创作中心另建价格 API 或校验逻辑,会造成数据和订单行为分裂。
## 目标
将用户中心现有 `posts` 面板升级为唯一的“创作中心”工作台,复刻 zibll 创作体验中可复用的 UX/UI 信息层级与交互细节,同时适配知识付费文章模型:
1. 在用户中心内提供文章创作总览、状态筛选、文章列表和明确的创作操作入口。
2. 复用现有前台投稿页作为新建/编辑文章的完整编辑器,保持双栏编辑体验,不复制第二套编辑器。
3. 在创作中心提供文章价格表,支持单篇快速调整价格,并支持批量选择后统一应用价格方案;所有保存最终走现有 `FrontSubmit` / `FrontSubmitPay` canonical 通路。
4. 在桌面端提供高效的双栏/卡片式工作区,在移动端提供单列、易触控、无横向溢出的体验。
5. 保留现有权限、状态、付费、下载、nonce、清洗、转义和设置开关边界。
## 非目标
- 不复制 zibll 的 PHP 函数、字段名、商品规格模型、订单模型或主题配置 API。
- 不在用户中心新增独立的 `creator` 页面、第二套文章管理 tab 或第二套前台路由;`posts` 是唯一文章管理入口,界面标题可升级为“创作中心”。
- 不把完整 TinyMCE 编辑器复制嵌入用户中心;新建/编辑继续跳转 `aksrt_get_new_post_url()` 对应的投稿页面。
- 不修改文章购买、订单结算、收益分成、优惠码、付费下载实际业务规则。
- 不新增旧选项双读、旧路由兼容层、数据迁移或新旧 UI 并存实现。
- 不把日常创作工作台迁入配置型 Admin SPA。
## 用户故事
- **US1(已登录创作者)**:我可以从用户中心侧栏、移动导航或创作快捷卡片进入创作中心,并通过稳定的 `?tab=posts` 深链直达。
- **US2(已登录创作者)**:我可以看到文章总数、各状态数量和最近文章,并在已发布、草稿、待审、私密、全部之间筛选。
- **US3(已登录创作者)**:我可以从创作中心一键新建文章,或对有权限的文章继续编辑、预览和删除;点击后复用现有投稿页面。
- **US4(已登录创作者)**:我可以在创作中心快速查看每篇文章的免费/付费状态、支付模式、普通价格和会员价格。
- **US5(已登录创作者)**:我可以直接在价格表中编辑一篇或多篇文章的价格,看到校验提示和保存结果,不必逐篇打开完整编辑器。
- **US6(有付费权限的创作者)**:我可以维护现金或积分价格、VIP1/VIP2 价格、付费阅读/付费资源和购买限制;价格规则与投稿页一致。
- **US7(移动端创作者)**:我可以在窄屏下查看文章、展开价格编辑、选择批量项和提交保存,不需要横向滚动。
- **US8(无权限或功能关闭时)**:我只能看到服务端允许的文章和操作;投稿、编辑、价格、下载等不可用能力不显示为可执行操作。
- **US9(开发者)**:文章查询、权限判断、价格清洗校验、元数据保存和订单读取保持单一业务通路,不因新增 UI 产生第二套业务规则。
## 需求
### 1. 用户中心信息架构
1. 将现有用户中心 `posts` 面板升级为创作中心,不新增重复 tab。
2. 复用现有:
- `AKSRT\User\Center` 面板注册与 REST 按需加载。
- `aksrt_get_user_center_tab_url()`、`aksrt_user_center_resolve_tabs()` 和运行时配置。
- `templates/parts/user-center/panel.php` 的 tabpanel 语义。
- 现有用户中心侧栏、移动 tab 导航和创作快捷卡片。
3. 入口名称统一为“创作中心”;内部键仍为 `posts`,避免同一文章管理能力出现两个入口。
4. 面板在用户未登录、用户中心禁用或投稿能力关闭时遵循现有访问与设置门控;不显示无法执行的创作操作。
5. 创作中心推荐的信息顺序:
- 顶部标题与主操作(新建文章)。
- 数据概览(全部、已发布、草稿、待审、私密)。
- 文章管理列表。
- 价格表/快速调价区。
- 空状态、加载状态和失败状态。
### 2. 文章总览与状态管理
1. 复用现有文章作者查询和状态计数,支持:`publish`、`draft`、`pending`、`private`、`all`。
2. 每篇文章至少展示:标题、封面/占位图、文章状态、更新时间、浏览或基础统计(若当前上下文已有)、付费状态、价格摘要和可用操作。
3. 状态筛选保持 URL 可深链;筛选切换不丢失当前用户中心 tab。
4. 非发布状态显示可读的文字状态标签,不只依赖颜色。
5. 支持分页或现有分页机制;不得为了价格表一次性加载无界文章数量。
6. 操作按钮按服务端能力显示:
- 新建文章。
- 编辑文章:仅 `can_edit_post()` 为真时显示。
- 预览:仅文章存在可访问预览时显示。
- 删除:仅 `can_delete_post()` 为真时显示,并提供确认反馈。
- 快速调价:仅具备 `new_post_pay` 且文章可编辑时显示。
7. 删除继续使用现有 nonce、作者归属、能力检查和草稿/回收站语义,不新增删除业务。
### 3. 新建与编辑体验
1. 新建文章入口继续使用 `aksrt_get_new_post_url()`。
2. 编辑入口传递现有文章 ID,继续使用 `FrontSubmit::can_edit_post()` 和当前投稿页编辑状态。
3. 投稿页继续复用现有:
- TinyMCE 编辑器与移动/桌面高度策略。
- 封面上传与封面预览。
- 分类、专题、高级筛选、标签。
- 草稿保存、提交审核/发布、离开页面警告。
- AI 摘要/标签等已存在能力。
4. 参考 zibll 的双栏工作台层级:左侧主编辑区,右侧文章参数、付费配置和提交操作;不复制 zibll 的私有 API 或字段。
5. 新建/编辑返回创作中心时,显示明确的保存/提交结果,并尽可能保留状态筛选和分页上下文。
### 4. 文章价格表
#### 4.1 展示字段
价格表在创作中心文章管理区作为独立卡片或可切换工作区展示。每行对应一篇当前用户有权限管理的文章,至少包含:
- 文章标题。
- 付费类型:免费、付费阅读、付费资源。
- 支付模式:现金或积分。
- 普通价格。
- VIP1 价格(启用时)。
- VIP2 价格(启用时)。
- 购买限制、登录限制等摘要(已有字段可提供时)。
- 最近保存时间与保存状态。
- 编辑价格、打开完整编辑器操作。
关闭付费的文章显示“免费”,不得把空值误呈现为价格为 0 的可购买配置。
#### 4.2 单篇快速调价
1. 价格表支持行内进入编辑态或展开编辑面板,不要求跳转完整文章编辑器。
2. 编辑态提供与 `sidebar-pay.php` 一致的字段:免费/付费开关、现金/积分、普通价格、VIP1、VIP2、付费类型、购买限制、登录限制;付费下载资源仅在现有接口能安全支持时提供入口,否则引导打开完整编辑器。
3. 编辑态提供最小值、最大值、免费规则和会员折扣的辅助提示,提示来源于现有设置,不在前端硬编码业务限制。
4. 保存中锁定当前行并呈现 loading;成功后更新该行摘要和可见成功反馈;失败时保留输入值并呈现服务端错误。
5. 价格修改不得隐式修改标题、正文、分类、封面或其他文章字段。
#### 4.3 批量快速调价
1. 价格表支持选择多篇有权限编辑的文章。
2. 批量工具支持统一应用一个明确的价格方案:
- 设为免费。
- 现金价格方案:普通价、VIP1、VIP2。
- 积分价格方案:普通积分、VIP1、VIP2。
3. 批量操作必须在提交前显示影响文章数量和最终价格预览,并要求用户确认。
4. 批量操作遇到部分文章无权限、文章已删除或校验失败时,服务端逐项返回结果;前端明确展示成功与失败项,不得静默覆盖。
5. 批量更新应采用受控请求大小或分页处理,不能无界提交;不得改变文章正文等非价格字段。
6. 若现有 `FrontSubmit` AJAX 契约无法安全表达批量更新,应先抽取共享的价格服务/请求契约,再由单篇和批量共同调用,不得复制 `FrontSubmitPay` 的规则。
#### 4.4 价格规则与 canonical 通路
1. 所有单篇和批量价格保存必须复用现有 `FrontSubmitPay::save_pay_meta()`,或抽取其为唯一共享价格服务;最终写入统一的 AKSRT 付费元数据结构。
2. 必须保持现有规则:
- 价格遵守管理员配置的最低值、最高值和是否允许免费。
- VIP1 价格不能高于普通价格。
- VIP2 价格不能高于 VIP1。
- 未手动填写会员价格时,按现有折扣配置计算。
- 现金/积分模式只接受当前 canonical 值。
- 付费类型、购买限制、登录限制、优惠码和付费下载遵循当前能力开关。
3. 服务端是最终校验者;前端提示只用于辅助,不得替代权限和业务校验。
4. 订单读取、文章购买和收益结算继续使用既有 pay meta 与服务,不新增价格存储键或订单解释逻辑。
### 5. 视觉与交互
1. 视觉参考 zibll 的用户中心与投稿页:卡片分组、清晰主次操作、状态徽章、封面/占位图、保存反馈、确认弹窗和移动端 bottom-sheet/展开面板体验。
2. 遵循 AKSRT 现有用户中心设计 token、字体、图标和 CSS 模块,不引入新的 UI 框架。
3. 关键交互必须支持键盘焦点、可见焦点和语义化按钮;错误和成功不能只用颜色表达。
4. 加载、空数据、失败、部分成功状态均需可感知,避免请求失败时显示误导性的 0 或空列表。
5. 删除与批量价格更新必须有可见确认;保存失败时不清空用户输入。
### 6. 响应式要求
- 桌面端:文章管理和价格表可使用表格/宽卡片;批量工具和主操作固定在容易扫描的位置。
- 移动端:表格转为卡片或可横向安全展开的分组布局,默认不得产生页面级横向溢出;价格字段垂直排列,触控目标足够大。
- 移动端批量选择、价格编辑、确认弹窗和错误反馈均可完成,不依赖 hover。
- 文章编辑页继续使用现有 `submit.css` 与 `front-submit.js` 的移动端适配。
### 7. 数据、接口与安全
1. 文章列表优先复用现有 `aksrt_get_user_center_render_context()`、`posts-list.php`、状态计数和用户中心 REST panel;新增请求必须属于 `aksrt/v1` 或现有 AJAX 体系并提供 `permission_callback`/nonce。
2. 所有价格更新请求必须验证登录、文章作者归属、`new_post_edit`/`new_post_pay` 等能力,并逐项重新校验,不信任前端选择结果。
3. 输入使用 `sanitize_*`、数值边界归一化和现有付费元数据清洗;输出使用 `esc_html`、`esc_attr`、`esc_url`、`wp_kses`。
4. SQL 使用 `$wpdb->prepare()`;不得通过前端暴露直接文件 URL、支付敏感信息或内部能力细节。
5. 新增文件尽量不超过 700 行,任何文件不得超过 1000 行;优先使用现有 renderer、trait、服务和模块拆分。
6. 设置读取必须使用 `AKSRT_Settings`/现有 Settings facade,不新增裸 `get_option()`。
## 验收标准
- 已登录用户可从用户中心现有创作入口进入 `posts` 创作中心,且 `?tab=posts` 深链激活正确面板;不存在重复 `creator` 文章管理入口。
- 创作中心显示文章状态概览,能够筛选发布、草稿、待审、私密和全部,并保留分页/URL 状态。
- 新建、编辑、预览、删除操作遵循当前能力与 nonce;新建/编辑实际进入现有投稿页面,删除不会绕过作者归属或回收站语义。
- 价格表能正确展示免费、付费阅读、付费资源、现金/积分和普通/VIP 价格摘要。
- 单篇行内调价成功后只更新价格相关数据;失败时保留输入并展示服务端错误。
- 批量调价有选择、预览、确认和逐项结果,不能静默覆盖无权限文章或吞掉部分失败。
- 普通价、VIP1、VIP2、最低/最高价、免费开关、折扣计算和付费类型规则与现有投稿页一致;订单读取和购买结果不产生第二套解释。
- 付费下载、购买限制、登录限制和优惠码能力不被价格表错误开启;不支持安全批量编辑的字段会引导完整编辑器。
- 桌面和移动端无页面级横向溢出;移动端可完成筛选、编辑、批量选择、确认和错误处理。
- REST/AJAX 路由具备权限回调或 nonce;所有新增输入输出遵循项目安全规则。
- `php tools/audit-admin-contracts.php` 退出码为 0 且报告无错误;至少完成 PHP lint、前端构建或项目可执行的对应静态检查。
## 非功能要求
- 使用文本域 `aksrt`,新增文案全部国际化。
- 继续使用现有用户中心壳、运行时配置和资源加载机制。
- 不增加兼容层、双读选项、旧新双路由、数据迁移或重复业务实现。
- 新增 API 必须记录清晰的请求/响应契约和逐项错误语义;不得通过通用成功响应掩盖部分失败。
## 开放问题
- 默认将 `posts` 面板的显示标题改为“创作中心”,内部 tab key 保持 `posts`;若产品希望 URL 也改为 `creator`,需在实现前明确选择,因为项目规则不允许长期保留两个重复入口。
- 默认批量调价采用“选择文章 → 统一价格方案 → 预览 → 确认”的模式;不包含按比例涨跌或价格模板市场。后续如需比例调整,应另立需求。
- 默认价格表只覆盖安全可复用的价格字段;付费下载资源等复杂结构继续通过完整投稿编辑器维护,除非实现阶段确认现有服务可提供等价的批量契约。
- 默认创作中心不内嵌完整编辑器;若需要无跳转编辑体验,应另行评估 TinyMCE 生命周期、自动保存和页面性能。