From 17c5f8365d1300024f7a50bb8638848aa700ce98 Mon Sep 17 00:00:00 2001 From: nanhaoluo <3075912108@qq.com> Date: Tue, 27 Jan 2026 11:09:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=20AI=20=E6=91=98?= =?UTF-8?q?=E8=A6=81=E6=8F=90=E7=A4=BA=E8=AF=8D=E5=B9=B6=E6=81=A2=E5=A4=8D?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=E7=9A=84=E8=AF=84=E8=AE=BA=E5=AE=A1=E6=9F=A5?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化 AI 摘要提示词,更专业、更详细的指导 - 恢复完整的评论审查检测模式:关闭/关键字必查/智能抽查/全量检测 - 新增触发关键字和黑名单关键字的区分 - 触发关键字:触发 AI 检测 - 黑名单关键字:直接标记为垃圾评论 - 恢复抽查基础概率设置 - 恢复检测范围、白名单等完整设置项 - 恢复自动处理方式和置信度阈值设置 - 更新保存逻辑以支持所有新增选项 - 优化关键字检查函数,支持两种关键字类型 --- .kiro/steering/mermaid-removal-summary.md | 51 - .kiro/steering/phase-3-complete.md | 306 - .kiro/steering/settings-page-guide.md | 285 - .../steering/settings-reorganize-complete.md | 197 - .kiro/steering/xiaomi-mimo-api-fix.md | 250 - docs/ai-spam-detection-architecture.md | 344 - functions.php | 57 +- settings.php | 111 +- settings.php.backup | 6670 -------------- settings.php.backup_before_ai_refactor | 7812 ----------------- settings.php.backup_before_ui_refactor | 7812 ----------------- tmp/settings_225a925.php | Bin 0 -> 498714 bytes 12 files changed, 148 insertions(+), 23747 deletions(-) delete mode 100644 .kiro/steering/mermaid-removal-summary.md delete mode 100644 .kiro/steering/phase-3-complete.md delete mode 100644 .kiro/steering/settings-page-guide.md delete mode 100644 .kiro/steering/settings-reorganize-complete.md delete mode 100644 .kiro/steering/xiaomi-mimo-api-fix.md delete mode 100644 docs/ai-spam-detection-architecture.md delete mode 100644 settings.php.backup delete mode 100644 settings.php.backup_before_ai_refactor delete mode 100644 settings.php.backup_before_ui_refactor create mode 100644 tmp/settings_225a925.php diff --git a/.kiro/steering/mermaid-removal-summary.md b/.kiro/steering/mermaid-removal-summary.md deleted file mode 100644 index ca4b121..0000000 --- a/.kiro/steering/mermaid-removal-summary.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -inclusion: manual ---- - -# Mermaid 功能移除总结 - -## 移除原因 - -WP-Markdown 编辑器在保存 Markdown 文件时,会将 Mermaid 代码块保存为一整行(没有真正的换行符),导致 Mermaid 解析器无法正确解析,持续报错:`Parse error on line 1: Expecting 'NEWLINE', 'SPACE', 'GRAPH'`。 - -尝试了多种解决方案(JavaScript 解码、PHP 预处理、智能格式化等)均失败。 - -## 已移除内容 - -1. **settings.php** - 移除 Mermaid 设置项和选项保存逻辑(约 15 行) -2. **functions.php** - 移除两个 Mermaid 处理函数(约 70 行) -3. **footer.php** - 移除 Mermaid 加载和渲染代码(约 220 行) -4. **style.css** - 移除 Mermaid 图表样式(约 25 行) -5. **本地镜像** - 删除 `assets/vendor/external/mermaid/` 目录 - -总计移除约 330 行代码和 2 个本地镜像文件。 - -## 需求文档 - -已创建 `mermaid-support-requirements.md` 文档,包含: -- 问题详细分析 -- 已尝试的解决方案 -- 推荐的替代方案(使用支持 Mermaid 的插件) -- 技术实现参考 -- 测试用例 - -## 推荐方案 - -使用支持 Mermaid 的 WordPress 插件: -- **WP Githuber MD** - 功能强大的 Markdown 编辑器 -- **Markdown Block** - Gutenberg 原生 Markdown 块 -- **Code Syntax Block** - 支持 Mermaid 的代码块插件 - -## Git 提交 - -``` -commit 54cbb40 -feat: 移除 Mermaid 支持并创建需求文档 - -- 从 settings.php 移除 Mermaid 设置项和选项保存逻辑 -- 从 functions.php 移除 Mermaid 代码块预处理函数 -- 从 footer.php 移除 Mermaid 加载和渲染代码 -- 从 style.css 移除 Mermaid 图表样式 -- 删除本地镜像文件 assets/vendor/external/mermaid/ -- 创建 mermaid-support-requirements.md 需求文档 -``` diff --git a/.kiro/steering/phase-3-complete.md b/.kiro/steering/phase-3-complete.md deleted file mode 100644 index 025ec5c..0000000 --- a/.kiro/steering/phase-3-complete.md +++ /dev/null @@ -1,306 +0,0 @@ -# AI 设置重构 - 第三阶段完成总结 - -## 📅 完成时间 -2026-01-26 - -## ✅ 第三阶段:UI 重构和移除向后兼容(已完成) - -### 步骤 2:在 settings.php 中插入新的 AI 功能部分 ✅ - -**完成内容**: -- ✅ 在第 1984 行之前插入新的 AI 功能 h1 标题 -- ✅ 添加 API 管理 (h2) 部分 - - 已配置的 API 列表展示 - - API 配置表单(添加/编辑) - - 测试、编辑、删除按钮 -- ✅ 添加文章摘要 (h2) 部分 - - 启用 AI 摘要开关 - - 默认使用 API 选择 - - 摘要提示词设置 - - 排除文章 ID 设置 - - 清除缓存按钮 -- ✅ 添加评论审核 (h2) 部分 - - 启用 AI 识别开关 - - 默认使用 API 选择 - - 实时检测模式 - - 关键字管理 - - Prompt 模式选择 - - 自定义 Prompt - - 自动处理阈值 - -**代码统计**: -- 新增 HTML 代码:约 300 行 -- 新增 JavaScript 代码:约 250 行 -- 总计新增:约 550 行 - -### 步骤 3:移除旧的 AI 设置代码 ✅ - -**已移除内容**: -- ✅ 旧的文章功能中的 AI 摘要设置(包含 10 个提供商的多 API 配置界面) -- ✅ 旧的 AI 服务商选择下拉框 -- ✅ 旧的按提供商分组的 API 配置界面 - -**删除代码统计**: -- 删除旧代码:约 600 行 - -### 步骤 4:更新选项保存逻辑 ✅ - -**完成内容**: -- ✅ 移除 `argon_update_option('argon_ai_summary_provider')` -- ✅ 移除所有提供商的 API 配置保存逻辑(10 个提供商的循环) -- ✅ 添加 `argon_update_option('argon_ai_summary_active_api')` -- ✅ 添加 `argon_update_option('argon_ai_spam_active_api')` -- ✅ 更新 `argon_ai_summary_exclude_ids` 为 `argon_ai_summary_exclude_posts` -- ✅ 简化评论审核相关选项保存 -- ✅ 移除不再使用的旧选项保存逻辑 - -**代码统计**: -- 删除旧保存逻辑:30 行 -- 新增保存逻辑:7 行 -- 净减少:23 行 - -## 📊 总体统计 - -### 代码变更 -- **settings.php**: - - 原始行数:7812 行 - - 最终行数:7514 行 - - 净减少:298 行 - - 新增代码:550 行 - - 删除代码:848 行 - -### Git 提交记录 -1. **3f188b7** - feat: 完成 AI 设置页面 UI 重构 - - 添加新的 AI 功能部分(API 管理、文章摘要、评论审核) - - 添加完整的 JavaScript 交互代码 - - 删除旧的 AI 设置代码 - -2. **04f20d4** - feat: 更新 AI 设置选项保存逻辑 - - 移除旧的 API 配置保存逻辑 - - 添加新的场景化 API 保存逻辑 - -## 🎯 新 UI 功能特性 - -### 1. API 管理界面 -- **统一列表展示**:所有提供商的 API 在一个列表中显示 -- **场景标签**:显示每个 API 用于哪些场景(文章摘要/评论审核) -- **操作按钮**:测试、编辑、删除 -- **添加/编辑表单**: - - 配置名称 - - API 密钥(可显示/隐藏) - - 提供商选择 - - API 端点(可选) - - 模型选择(支持刷新模型列表) - -### 2. 文章摘要设置 -- 启用/禁用开关 -- 从所有 API 中选择默认使用的 API -- 摘要提示词自定义 -- 排除文章 ID 设置 -- 清除缓存功能 - -### 3. 评论审核设置 -- 启用/禁用开关 -- 从所有 API 中选择默认使用的 API -- 实时检测模式(禁用/智能抽查/检测所有) -- 关键字黑名单管理 -- Prompt 模式选择(极简/标准/增强/自定义) -- 自定义 Prompt 编辑器 -- 自动处理阈值设置 - -### 4. JavaScript 交互功能 -- ✅ 添加 API(表单验证、AJAX 提交) -- ✅ 编辑 API(加载数据、更新) -- ✅ 删除 API(确认对话框、AJAX 删除) -- ✅ 测试 API(连通性测试、结果提示) -- ✅ 刷新模型列表(动态获取、选择应用) -- ✅ 显示/隐藏密码 -- ✅ 清除 AI 摘要缓存 -- ✅ Prompt 模式切换(显示/隐藏自定义 Prompt) - -## 🔧 技术实现 - -### 数据流 -``` -用户操作 → JavaScript → AJAX → functions.php → WordPress Options - ↓ - argon_ai_apis - argon_ai_summary_active_api - argon_ai_spam_active_api -``` - -### AJAX 端点 -- `argon_ajax_add_unified_api` - 添加 API -- `argon_ajax_update_unified_api` - 更新 API -- `argon_ajax_delete_unified_api` - 删除 API -- `argon_ajax_get_unified_api` - 获取单个 API -- `argon_ajax_test_unified_api` - 测试 API -- `argon_ajax_get_ai_models` - 获取模型列表 -- `argon_ajax_clear_ai_summaries` - 清除摘要缓存 - -### 数据结构 -```php -// 统一存储所有 API -argon_ai_apis = [ - { - 'id' => 'api_1737878400_1234', - 'name' => '主 OpenAI API', - 'provider' => 'openai', - 'api_key' => 'sk-xxx', - 'api_endpoint' => '', - 'model' => 'gpt-4o-mini', - 'created_at' => 1737878400 - } -] - -// 场景化配置 -argon_ai_summary_active_api = 'api_1737878400_1234' // 文章摘要 -argon_ai_spam_active_api = 'api_1737878400_5678' // 评论审核 -``` - -## ✨ 用户体验改进 - -### 优势 -1. **统一管理**:所有 API 在一个列表中,一目了然 -2. **灵活配置**:不同场景可以使用不同的 API -3. **易于添加**:添加 API 时直接输入密钥和选择提供商 -4. **更好的 UX**:不需要在多个提供商之间切换 -5. **实时反馈**:测试 API、刷新模型等操作都有即时反馈 -6. **场景可视化**:清楚地看到每个 API 用于哪些场景 - -### 界面特点 -- 现代化设计:使用卡片式布局,视觉层次清晰 -- 响应式交互:所有操作都有加载状态和结果提示 -- 友好的错误处理:表单验证、错误提示 -- 便捷的操作:一键测试、刷新模型、清除缓存 - -## ✅ 步骤 5:移除 functions.php 中的向后兼容代码(已完成) - -**已移除的内容**: -1. ✅ 旧的多 API 管理函数(约 200 行): - - `argon_get_provider_apis()` - - `argon_add_provider_api()` - - `argon_update_provider_api()` - - `argon_delete_provider_api()` - - `argon_set_active_api()` - -2. ✅ 数据迁移函数(约 45 行): - - `argon_migrate_ai_apis()` - - `add_action('after_setup_theme', 'argon_migrate_ai_apis')` - -3. ✅ 简化 `argon_get_ai_provider_config()` 函数 - - 移除回退到旧系统的逻辑 - - 只保留从新系统获取配置的代码 - -4. ✅ 简化 `argon_get_active_api_config()` 函数 - - 移除向后兼容的回退逻辑 - - 返回空配置而不是尝试旧系统 - -**代码统计**: -- 删除代码:约 245 行 -- functions.php 文件更加简洁 - -### 步骤 6:清理测试文件 ✅ - -**已删除的文件**: -- ✅ `test-system-status.php` -- ✅ `test-unified-api-system.php` -- ✅ `tmp/ai-settings-new-structure.php` -- ✅ `tmp/new-ai-settings-section.php` -- ✅ `tmp/new-ai-settings-js.php` -- ✅ `tmp/additional-ajax-functions.php` -- ✅ `tmp/complete-ai-section.php` -- ✅ `tmp/new-ai-section-complete.php` -- ✅ `tmp/refactor-settings-ui.py` -- ✅ `tmp/remove_spam_detection_subsection.py` - -**保留的文件**: -- `.kiro/steering/*.md` - 所有文档作为历史记录保留 -- `tmp/refactor-settings.py` - 可能还有用 -- `tmp/analyze-settings.py` - 可能还有用 - -## 🎉 阶段性成果 - -第三阶段的 UI 重构已经基本完成!新的 AI 功能界面已经上线,用户现在可以: - -1. ✅ 在统一的界面中管理所有 AI 提供商的 API -2. ✅ 为不同场景(文章摘要、评论审核)选择不同的 API -3. ✅ 测试 API 连通性 -4. ✅ 刷新并选择可用模型 -5. ✅ 自定义 Prompt 和其他高级设置 - -## 🎉 第三阶段完成总结 - -第三阶段的所有工作已经完成!包括: - -1. ✅ **UI 重构**:新的 AI 功能界面已上线 -2. ✅ **选项保存**:所有设置项正确保存 -3. ✅ **移除旧代码**:删除了约 600 行旧的 AI 设置代码 -4. ✅ **移除向后兼容**:删除了约 245 行向后兼容代码 -5. ✅ **清理临时文件**:删除了所有测试脚本和临时文件 - -## 📝 下一步建议 - -1. **功能测试**: - - ✅ 在 WordPress 后台测试所有功能 - - ✅ 验证 API 添加、编辑、删除功能 - - ✅ 测试文章摘要和评论审核功能 - - ⏳ 测试不同场景使用不同 API - - ⏳ 测试 API 连通性和模型刷新功能 - -2. **文档更新**(可选): - - 更新用户文档,说明新的 API 管理方式 - - 添加使用指南和常见问题 - - 更新主题更新日志 - -3. **性能优化**(可选): - - 监控 AI API 调用性能 - - 优化缓存策略 - - 添加错误重试机制 - -## 🔗 相关文件 - -- `settings.php` - 设置页面(已重构) -- `functions.php` - 核心函数(包含统一 API 管理系统) -- `.kiro/steering/phase-1-complete.md` - 第一阶段总结 -- `.kiro/steering/phase-2-testing-guide.md` - 第二阶段测试指南 -- `.kiro/steering/phase-3-implementation-plan.md` - 第三阶段实施计划 -- `.kiro/steering/ai-settings-refactor-plan.md` - 重构方案 -- `.kiro/steering/ai-refactor-next-steps.md` - 下一步工作 - -## 💡 总结 - -**第三阶段已全部完成!** 🎉 - -AI 设置重构项目的所有三个阶段都已成功完成: - -### 第一阶段 ✅:后端核心功能开发 -- 统一 API 管理系统 -- 数据迁移机制 -- AJAX 接口 - -### 第二阶段 ✅:测试和验证 -- 系统测试通过 -- 功能验证完成 - -### 第三阶段 ✅:UI 重构和代码清理 -- 新的 AI 功能界面上线 -- 移除旧代码和向后兼容逻辑 -- 清理临时文件 - -### 最终成果 - -1. **统一的 API 管理**:所有 AI 提供商的 API 在一个列表中管理 -2. **场景化配置**:文章摘要和评论审核可以使用不同的 API -3. **更好的用户体验**:直观的界面,便捷的操作 -4. **代码更简洁**:删除了约 1100 行旧代码和向后兼容逻辑 -5. **完整的功能**:API 测试、模型刷新、清除缓存等功能齐全 - -### Git 提交记录 - -1. **5254ee0** - feat: 添加统一 API 管理系统 -2. **3f188b7** - feat: 完成 AI 设置页面 UI 重构 -3. **04f20d4** - feat: 更新 AI 设置选项保存逻辑 -4. **bd1e643** - refactor: 移除 functions.php 中的向后兼容代码 - -系统已经可以正常使用,用户可以享受到全新的 AI 功能管理体验! diff --git a/.kiro/steering/settings-page-guide.md b/.kiro/steering/settings-page-guide.md deleted file mode 100644 index ac7abf5..0000000 --- a/.kiro/steering/settings-page-guide.md +++ /dev/null @@ -1,285 +0,0 @@ ---- -inclusion: fileMatch -fileMatchPattern: "settings.php" ---- - -# Argon 主题设置页开发指南 - -本文档为 AI 助手和开发者提供 `settings.php` 文件的结构说明和开发规范。 - -## 文件概述 - -`settings.php` 是 Argon 主题的核心设置页面,包含所有主题配置选项。该文件通过 WordPress 后台管理界面呈现给用户。 - -## 设置页分类结构 - -设置页采用 **二级分类** 结构: -- **一级分类 (h2)**:主要功能模块 -- **二级分类 (h3)**:模块内的子功能 - -### 分类层级(当前结构) - -``` -1. 基础设置 (section-basic) - ├── 主题色 (subsection-theme-color) - └── 夜间模式 (subsection-dark-mode) - -2. 外观样式 (section-appearance) - ├── 卡片样式 (subsection-card-style) - └── 字体 (subsection-font) - -3. 页面布局 (section-layout) - └── 整体布局 (subsection-page-layout) - -4. 顶栏设置 (section-toolbar) - ├── 基本设置 (subsection-toolbar-basic) - ├── 顶栏标题 (subsection-toolbar-title) - ├── 顶栏图标 (subsection-toolbar-icon) - ├── 顶栏外观 (subsection-toolbar-appearance) - └── 自定义链接 (subsection-toolbar-links) - -5. Banner 设置 (section-banner) - ├── Banner 内容 (subsection-banner-content) - ├── Banner 外观 (subsection-banner-appearance) - └── Banner 动画 (subsection-banner-animation) - -6. 页面背景 (section-background) - ├── 背景图片 (subsection-background-image) - └── 透明度与毛玻璃 (subsection-transparency) - -7. 侧边栏 (section-sidebar) - ├── 作者信息 (subsection-author-info) - ├── 扩展功能 (subsection-sidebar-features) - └── 博客公告 (subsection-announcement) - -8. 浮动按钮与页脚 (section-fab-footer) - ├── 浮动操作按钮 (subsection-fab) - └── 页脚设置 (subsection-footer) - -9. 高级设置 (section-advanced) - ├── SEO (subsection-seo) - ├── CDN (subsection-cdn) - ├── 子目录 (subsection-subdirectory) - ├── 日期格式 (subsection-date-format) - ├── 自定义脚本 (subsection-scripts) - └── 杂项 (subsection-misc) - -10. 文章显示 (section-post-display) - ├── Meta 信息 (subsection-post-meta) - ├── 文章头图 (subsection-thumbnail) - ├── 标题样式 (subsection-title-style) - └── 过时提示 (subsection-post-other) - -11. 文章功能 (section-post-features) - ├── 脚注引用 (subsection-footnote) - ├── 分享按钮 (subsection-share) - ├── 文章目录 (subsection-toc) - ├── 赞赏功能 (subsection-donate) - ├── 文末内容 (subsection-post-footer) - └── 相似推荐 (subsection-related-posts) - -12. 特殊页面 (section-special-pages) - ├── 归档页面 (subsection-archive) - ├── 搜索设置 (subsection-search) - └── 友情链接 (subsection-friend-links) - -13. 功能增强 (section-enhancements) - ├── 代码高亮 (subsection-code-highlight) - ├── 数学公式 (subsection-math) - ├── Lazyload (subsection-lazyload) - ├── 图片放大 (subsection-lightbox) - ├── Pangu.js (subsection-pangu) - └── 动画效果 (subsection-animation) - -14. 评论设置 (section-comment) - ├── 评论分页 (subsection-comment-pagination) - ├── 发送评论 (subsection-comment-submit) - ├── 评论功能 (subsection-comment-features) - └── 评论区外观 (subsection-comment-appearance) - -15. 验证码与安全 (section-security) - ├── 验证码设置 (subsection-captcha) - ├── 场景验证码 (subsection-captcha-scenes) - └── 速率限制 (subsection-rate-limit) -``` - -## HTML 结构规范 - -### 一级分类标题 (h2) -```php - -

-``` - -### 二级分类标题 (h3) -```php -

-``` - -### 设置项结构 -```php - - - - -

- - -``` - -## 常用输入控件 - -### 下拉选择框 -```php - -``` - -### 文本输入框 -```php - -``` - -### 数字输入框 -```php - -``` - -### 复选框 -```php - - -``` - -### 颜色选择器 -```php - -``` - -### 多行文本框 -```php - -``` - -## 选项保存 - -在文件末尾的 `argon_update_themeoptions()` 函数中添加选项保存: - -```php -// 普通选项 -argon_update_option('argon_option_name'); - -// 允许 HTML 标签的选项 -argon_update_option_allow_tags('argon_option_name'); - -// 复选框选项 -argon_update_option_checkbox('argon_option_name'); -``` - -## 国际化 - -所有用户可见文本必须使用 `_e()` 或 `__()` 函数包裹: - -```php - - - -``` - -## 设置项归属参考 - -### 应归入"基础设置"的选项 -- argon_theme_color (主题颜色) -- argon_enable_immersion_color (沉浸式主题色) -- argon_show_customize_theme_color_picker (允许用户自定义主题色) -- argon_darkmode_autoswitch (夜间模式切换方案) -- argon_enable_amoled_dark (夜间模式颜色方案) -- argon_dateformat (日期格式) - -### 应归入"外观样式"的选项 -- argon_card_radius (卡片圆角) -- argon_card_shadow (卡片阴影) -- argon_font (默认字体) -- argon_enable_smoothscroll_type (平滑滚动) -- argon_enable_into_article_animation (进入文章动画) -- argon_disable_pjax_animation (禁用 Pjax 动画) - -### 应归入"页面布局"的选项 -- argon_page_layout (页面布局) -- argon_article_list_waterflow (文章列表布局) -- argon_article_list_layout (文章列表卡片布局) - -### 应归入"顶栏设置"的选项 -- argon_enable_headroom (顶栏显示状态) -- argon_toolbar_title (顶栏标题) -- argon_toolbar_icon (图标地址) -- argon_toolbar_icon_link (图标链接) -- argon_toolbar_blur (毛玻璃效果) -- argon_toolbar_style (顶栏样式) -- argon_toolbar_shadow (顶栏阴影) -- argon_toolbar_border (底部边框) -- argon_toolbar_compact (紧凑模式) -- argon_toolbar_center (标题居中) -- argon_toolbar_links_left (左侧自定义链接) -- argon_toolbar_links_right (右侧自定义链接) - -### 应归入"Banner 设置"的选项 -- argon_banner_title (Banner 标题) -- argon_banner_subtitle (Banner 副标题) -- argon_banner_size (Banner 显示状态) -- argon_page_background_banner_style (Banner 透明化) -- argon_show_toolbar_mask (顶栏遮罩) -- argon_banner_background_url (背景图地址) -- argon_banner_background_color_type (渐变背景样式) -- argon_banner_background_hide_shapes (隐藏背景圆) -- argon_enable_banner_title_typing_effect (打字动画) -- argon_banner_typing_effect_interval (打字动画时长) - -### 应归入"侧边栏"的选项 -- argon_sidebar_banner_title (左侧栏标题) -- argon_sidebar_banner_subtitle (左侧栏子标题) -- argon_sidebar_auther_name (作者名称) -- argon_sidebar_auther_image (作者头像) -- argon_sidebar_author_description (作者简介) -- argon_show_todo_list (TODO 列表) -- argon_show_duolingo_streak (多邻国连胜) -- argon_duolingo_username (多邻国用户名) -- argon_sidebar_announcement (公告内容) -- argon_show_headindex_number (目录序号) - -### 应归入"验证码与安全"的选项 -- argon_need_captcha (全局验证码开关) -- argon_captcha_type (验证码类型) -- argon_geetest_captcha_id (极验 ID) -- argon_geetest_captcha_key (极验 Key) -- argon_geetest_api_server (极验服务器) -- argon_get_captcha_by_ajax (Ajax 获取验证码) -- argon_comment_captcha_mode (评论验证码) -- argon_todo_captcha_mode (TODO 验证码) -- argon_friend_link_captcha (友链验证码) -- argon_rate_limit_enable (速率限制) -- argon_rate_limit_window (速率窗口) -- argon_rate_limit_max_count (最大次数) -- argon_rate_limit_min_interval (最小间隔) - -## 注意事项 - -1. **选项命名**:所有选项名必须以 `argon_` 前缀开头 -2. **默认值**:使用 `get_option('name', 'default')` 的第二个参数设置默认值 -3. **安全性**:用户输入的 HTML 内容需使用 `argon_update_option_allow_tags()` 保存 -4. **响应式**:设置页需要在移动端正常显示 -5. **目录导航**:页面右侧有自动生成的目录,h2/h3 标题会被收录 - -## 相关文件 - -- `functions.php` - 主题函数,包含选项的使用逻辑 -- `header.php` - 页头,使用顶栏相关选项 -- `footer.php` - 页脚,使用页脚相关选项 -- `style.css` - 主题样式 -- `admin.css` - 后台样式 diff --git a/.kiro/steering/settings-reorganize-complete.md b/.kiro/steering/settings-reorganize-complete.md deleted file mode 100644 index b990c3d..0000000 --- a/.kiro/steering/settings-reorganize-complete.md +++ /dev/null @@ -1,197 +0,0 @@ -# Settings.php 完整重组总结 - -## 重组完成情况 ✅ - -已成功完成设置页的完整重组,从原来的16个分类扩展到18个分类,结构更加合理清晰。 - -## 最终分类结构(18个一级分类) - -``` -1. 基础设置 (section-basic) - ├── 主题色 (subsection-theme-color) - ├── 夜间模式 (subsection-dark-mode) - └── 子目录 (subsection-subdirectory) - -2. 外观样式 (section-appearance) - ├── 卡片样式 (subsection-card-style) - ├── 字体 (subsection-font) - └── 动画效果 (subsection-animation) - -3. 页面布局 (section-layout) - └── 整体布局 (subsection-page-layout) - -4. 顶栏设置 (section-toolbar) - ├── 基本设置 (subsection-toolbar-basic) - ├── 顶栏标题 (subsection-toolbar-title) - ├── 顶栏图标 (subsection-toolbar-icon) - ├── 顶栏外观 (subsection-toolbar-appearance) - └── 自定义链接 (subsection-toolbar-links) - -5. Banner 设置 (section-banner) - ├── Banner 内容 (subsection-banner-content) - ├── Banner 外观 (subsection-banner-appearance) - └── Banner 动画 (subsection-banner-animation) - -6. 页面背景 (section-background) - ├── 背景图片 (subsection-background-image) - └── 透明度与毛玻璃 (subsection-transparency) - -7. 侧边栏 (section-sidebar) - ├── 作者信息 (subsection-author-info) - ├── 扩展功能 (subsection-sidebar-features) - └── 博客公告 (subsection-announcement) - -8. 浮动按钮 (section-fab) [新建] - └── 浮动操作按钮 (subsection-fab) - -9. 页脚设置 (section-footer) [新建] - └── 页脚 (subsection-footer) - -10. SEO 与性能 (section-seo-performance) - ├── SEO (subsection-seo) - ├── CDN 加速 (subsection-cdn) - └── 日期格式 (subsection-date-format) - -11. 文章显示 (section-post-display) - ├── Meta 信息 (subsection-post-meta) - └── 文章头图 (subsection-thumbnail) - -12. 文章功能 (section-post-features) - ├── AI 文章摘要 (subsection-ai-summary) - ├── 脚注引用 (subsection-footnote) - ├── 分享 (subsection-share) - ├── 文章目录 (subsection-toc) - ├── 赞赏 (subsection-donate) - ├── 文末内容 (subsection-post-footer) - ├── 相似推荐 (subsection-related-posts) - ├── 标题样式 (subsection-title-style) [从文章显示移入] - └── 过时提示 (subsection-post-other) [从文章显示移入] - -13. 特殊页面 (section-special-pages) - ├── 搜索设置 (subsection-search) - ├── 归档页面 (subsection-archive) - └── 友情链接 (subsection-friend-links) - -14. 功能增强 (section-enhancements) - ├── 代码高亮 (subsection-code-highlight) - ├── 数学公式 (subsection-math) - ├── Lazyload (subsection-lazyload) - ├── 图片放大 (subsection-lightbox) - └── Pangu.js (subsection-pangu) - -15. 高级设置 (section-advanced) - └── 自定义脚本 (subsection-scripts) - -16. 评论设置 (section-comment) - ├── 评论分页 (subsection-comment-pagination) - ├── 发送评论 (subsection-comment-submit) - ├── 评论功能 (subsection-comment-features) [从验证码与安全移入] - ├── AI 垃圾评论识别 (subsection-comment-spam-detection) [从验证码与安全移入] - └── 评论区外观 (subsection-comment-appearance) [从验证码与安全移入] - -17. 验证码设置 (section-captcha) [重命名] - ├── 验证码配置 (subsection-captcha) - └── 场景验证码 (subsection-captcha-scenes) - -18. 反馈与安全 (section-feedback-security) [新建] - ├── 反馈设置 (subsection-feedback) [从验证码与安全移入] - └── 速率限制 (subsection-rate-limit) [从验证码与安全移入] -``` - -## 主要改进 - -### 1. 拆分混杂的分类 -- **浮动按钮与页脚** → 拆分为"浮动按钮"和"页脚设置"两个独立分类 -- **验证码与安全** → 拆分为"验证码设置"和"反馈与安全"两个分类 - -### 2. 移动错位的设置项 -- 评论功能、AI垃圾评论识别、评论区外观 → 从"验证码与安全"移到"评论设置" -- 标题样式、过时提示 → 从"文章显示"移到"文章功能" -- 页脚设置 → 从"特殊页面"移到独立的"页脚设置"分类 -- 日期格式 → 从错误位置移到"SEO与性能" - -### 3. 删除重复内容 -- 删除重复的顶栏设置(107行) -- 删除重复的页脚设置(32行) -- 删除重复的日期格式设置(16行) -- 删除高级设置中重复的动画设置(68行) -- 删除重复的CDN设置(88行) -- 总计删除311行重复内容 - -### 4. 修复保存问题 -- 在外观样式中添加动画效果表单字段(平滑滚动、进入文章动画、Pjax动画) -- 在SEO与性能中添加CDN加速表单字段(CDN选择、自定义路径、WP目录) -- 在SEO与性能中添加日期格式表单字段 -- 修复邮件模板保存问题(添加spam_notify类型) -- 修复归档页面设置混乱问题 - -### 5. 优化命名 -- "验证码设置"子分类 → "验证码配置"(更明确) -- "CDN" → "CDN 加速" -- 7个子分类命名优化(场景验证码、顶栏标题等) - -## Git 提交历史 - -1. **c68d47b** - fix: 删除SEO与性能分类中重复的CDN和日期格式设置 -2. **3104cad** - fix: 删除重复的子目录和页脚设置 -3. **0fb1d11** - feat: 拆分浮动按钮与页脚为独立分类 -4. **b471bbc** - feat: 完成设置页完整重组(将评论相关设置移到评论设置分类) -5. **e57dcd9** - fix: 修正分类编号 -6. **f9dc71d** - fix: 修复设置页分类结构问题 -7. **66dd8bf** - feat: 完成设置页18个分类的完整重组 -8. **43f620d** - docs: 添加设置页重组完整总结文档并清理临时脚本 -9. **e7509e5** - fix: 优化设置页结构细节 -10. **a536fc0** - fix: 修复邮件模板无法保存的问题 -11. **be5a653** - fix: 修复特殊页面归档和友情链接设置混乱的问题 -12. **3ce6992** - fix: 修复动画效果、CDN和日期格式选项无法保存的问题 - -## 统计数据 - -- **原始文件**: 6670 行 -- **最终文件**: 6651 行 -- **删除重复内容**: 311 行 -- **新增内容**: 292 行(新分类标题、页脚设置、动画效果表单、CDN表单、日期格式表单) -- **净减少**: 19 行 -- **优化的子分类**: 8 个 -- **新建的一级分类**: 3 个(浮动按钮、页脚设置、反馈与安全) -- **重命名的一级分类**: 1 个(验证码与安全 → 验证码设置) -- **重组的子分类**: 10 个 -- **修复的bug**: 4 个(邮件模板保存、归档页面混乱、动画效果保存、CDN/日期格式保存) - -## 优化效果 - -### 逻辑更清晰 -- 每个分类职责单一,不再混杂不相关的设置 -- 相关设置集中在一起,便于查找和管理 - -### 结构更合理 -- 18个一级分类,每个分类包含2-5个子分类 -- 分类层级清晰,符合用户使用习惯 - -### 无重复项 -- 删除所有重复的设置项和分类标题 -- 每个设置项只出现一次,避免混淆 - -### 保持兼容 -- 所有设置项的 `name` 属性保持不变 -- 所有 ID (`section-*` 和 `subsection-*`) 保持不变 -- 不影响现有配置和功能 - -## 文件信息 - -- **最终文件**: `settings.php` (6651 行) -- **备份文件**: `settings.php.backup` -- **重组脚本**: - - `reorganize_comment_settings.py` - - `fix_all_issues.py` - - `fix_final_issues.py` - - `split_fab_footer.py` -- **完成时间**: 2026-01-22 -- **最后提交**: 3ce6992 - -## 后续建议 - -1. **测试验证**: 在WordPress后台测试所有设置项是否正常工作 -2. **文档更新**: 更新主题文档,反映新的分类结构 -3. **用户通知**: 如果发布更新,在更新日志中说明分类结构的优化 -4. **清理脚本**: 可以删除临时的Python重组脚本文件 diff --git a/.kiro/steering/xiaomi-mimo-api-fix.md b/.kiro/steering/xiaomi-mimo-api-fix.md deleted file mode 100644 index 4865598..0000000 --- a/.kiro/steering/xiaomi-mimo-api-fix.md +++ /dev/null @@ -1,250 +0,0 @@ -# 小米 Mimo API 修复说明 - -## 修复时间 -2026-01-26 - -## 问题描述 -小米 Mimo 模型 API 请求失败,无法正常调用 MiMo-V2-Flash 模型。 - -## 修复内容 - -### 1. 优化 `argon_call_xiaomi_api` 函数 - -**修改位置**: `functions.php` 第 8047-8140 行 - -**主要改进**: -- ✅ 添加 `stream` 参数,明确设置为 `false`(非流式响应) -- ✅ 添加 `Accept` 请求头,明确接受 JSON 格式 -- ✅ 使用 `JSON_UNESCAPED_UNICODE` 标志编码请求体,确保中文字符正确传输 -- ✅ 明确设置 `sslverify` 为 `true`,确保 SSL 验证 - -**修改前**: -```php -$data = [ - 'model' => $model, - 'messages' => [ - ['role' => 'system', 'content' => $prompt], - ['role' => 'user', 'content' => $content] - ], - 'temperature' => 0.7, - 'max_tokens' => 500 -]; - -$response = wp_remote_post($endpoint, [ - 'headers' => [ - 'Content-Type' => 'application/json', - 'Authorization' => 'Bearer ' . $api_key - ], - 'body' => json_encode($data), - 'timeout' => 30 -]); -``` - -**修改后**: -```php -$data = [ - 'model' => $model, - 'messages' => [ - ['role' => 'system', 'content' => $prompt], - ['role' => 'user', 'content' => $content] - ], - 'temperature' => 0.7, - 'max_tokens' => 500, - 'stream' => false -]; - -$response = wp_remote_post($endpoint, [ - 'headers' => [ - 'Content-Type' => 'application/json', - 'Authorization' => 'Bearer ' . $api_key, - 'Accept' => 'application/json' - ], - 'body' => json_encode($data, JSON_UNESCAPED_UNICODE), - 'timeout' => 30, - 'sslverify' => true -]); -``` - -### 2. 增强 `argon_get_xiaomi_models` 函数 - -**修改位置**: `functions.php` 第 9009-9055 行 - -**主要改进**: -- ✅ 添加 `Accept` 请求头 -- ✅ 明确设置 `sslverify` 为 `true` -- ✅ 添加详细的错误日志记录 -- ✅ 记录 HTTP 状态码和响应内容,便于调试 -- ✅ 改进错误处理逻辑 - -**新增错误日志**: -- API 调用失败时记录错误信息 -- HTTP 状态码非 200 时记录状态码和响应内容 -- 响应格式异常时记录原始响应 - -## 可能的问题原因 - -根据修复内容,原始代码可能存在以下问题: - -1. **缺少 stream 参数**: 某些 API 实现要求明确指定是否使用流式响应 -2. **缺少 Accept 头**: API 可能需要明确的 Accept 头来返回正确格式 -3. **中文编码问题**: 未使用 `JSON_UNESCAPED_UNICODE` 可能导致中文字符编码错误 -4. **缺少错误日志**: 之前无法诊断具体的失败原因 - -## 测试方法 - -### 方法 1: 使用测试脚本 - -1. 打开 `test-xiaomi-mimo-api.php` 文件 -2. 将 `YOUR_API_KEY_HERE` 替换为你的实际 API 密钥 -3. 在浏览器中访问: `https://your-domain.com/wp-content/themes/argon/test-xiaomi-mimo-api.php` -4. 查看测试结果,包括: - - 基本 API 请求测试 - - 简化请求格式测试 - - 获取模型列表测试 - - cURL 命令示例 - -### 方法 2: 在 WordPress 后台测试 - -1. 进入 WordPress 后台 → Argon 主题设置 -2. 找到 "AI 功能" → "API 管理" -3. 添加或编辑小米 Mimo API 配置 -4. 点击"测试"按钮 -5. 查看测试结果 - -### 方法 3: 查看错误日志 - -如果仍然失败,检查 WordPress 错误日志: - -```bash -# 查看 PHP 错误日志 -tail -f /path/to/php-error.log - -# 或者 WordPress debug.log -tail -f /path/to/wp-content/debug.log -``` - -错误日志会包含: -- API 调用失败的具体错误信息 -- HTTP 状态码 -- API 响应内容 - -## 小米 Mimo API 规范 - -### 端点 -- **Chat Completions**: `https://api.mimo.xiaomi.com/v1/chat/completions` -- **Models**: `https://api.mimo.xiaomi.com/v1/models` - -### 认证 -使用 Bearer Token 认证: -``` -Authorization: Bearer YOUR_API_KEY -``` - -### 请求格式 -```json -{ - "model": "MiMo-V2-Flash", - "messages": [ - {"role": "system", "content": "你是一个有帮助的助手。"}, - {"role": "user", "content": "你好"} - ], - "temperature": 0.7, - "max_tokens": 500, - "stream": false -} -``` - -### 响应格式 -```json -{ - "id": "chatcmpl-xxx", - "object": "chat.completion", - "created": 1234567890, - "model": "MiMo-V2-Flash", - "choices": [ - { - "index": 0, - "message": { - "role": "assistant", - "content": "你好!我是小米的 AI 助手..." - }, - "finish_reason": "stop" - } - ], - "usage": { - "prompt_tokens": 10, - "completion_tokens": 20, - "total_tokens": 30 - } -} -``` - -## 支持的模型 - -根据官方文档,小米 Mimo 目前支持的模型: - -- **MiMo-V2-Flash** (推荐) - - 309B 总参数,15B 活跃参数 - - 256K 上下文窗口 - - 擅长推理、编码和 Agent 场景 - - 在 SWE-bench 上排名第一 - -## 常见问题 - -### Q1: API 密钥在哪里获取? -A: 访问 [小米 Mimo 平台](https://platform.xiaomimimo.com/) 注册并获取 API 密钥。 - -### Q2: API 是否免费? -A: 根据官方信息,MiMo-V2-Flash 目前处于公测阶段,可能提供免费额度。具体请查看官方文档。 - -### Q3: 为什么返回 401 错误? -A: 检查以下几点: -- API 密钥是否正确 -- API 密钥是否已激活 -- 是否正确设置了 Authorization 头 - -### Q4: 为什么返回 429 错误? -A: 请求频率超过限制,需要: -- 降低请求频率 -- 检查是否有配额限制 -- 联系小米客服增加配额 - -### Q5: 为什么返回 500 错误? -A: 服务器端错误,可能原因: -- API 服务暂时不可用 -- 请求参数格式错误 -- 模型名称错误 - -## 参考资料 - -- [LiteLLM - Xiaomi MiMo](https://docs.litellm.ai/docs/providers/xiaomi_mimo) -- [Puter.js - Free Xiaomi MiMo API](https://developer.puter.com/tutorials/free-unlimited-xiaomi-mimo-api/) -- [OpenRouter - MiMo-V2-Flash](https://openrouter.ai/xiaomi/mimo-v2-flash-20251210/api) -- [Hugging Face - MiMo-V2-Flash](https://huggingface.co/XiaomiMiMo/MiMo-V2-Flash) - -## 后续优化建议 - -1. **添加重试机制**: 对于临时性失败,自动重试 2-3 次 -2. **缓存模型列表**: 减少对 models 端点的请求 -3. **支持流式响应**: 对于长文本生成,支持流式输出 -4. **添加速率限制**: 避免触发 API 限流 -5. **监控 API 使用**: 记录 API 调用次数和成本 - -## 相关文件 - -- `functions.php` - 核心函数(包含 API 调用逻辑) -- `test-xiaomi-mimo-api.php` - 测试脚本 -- `settings.php` - 设置页面(AI 功能配置) - -## Git 提交 - -提交信息将包含: -``` -fix: 修复小米 Mimo API 请求失败的问题 - -- 添加 stream 参数明确设置为非流式响应 -- 添加 Accept 请求头确保返回 JSON 格式 -- 使用 JSON_UNESCAPED_UNICODE 编码确保中文正确传输 -- 添加详细的错误日志记录便于调试 -- 改进 SSL 验证设置 -``` diff --git a/docs/ai-spam-detection-architecture.md b/docs/ai-spam-detection-architecture.md deleted file mode 100644 index 1f81e62..0000000 --- a/docs/ai-spam-detection-architecture.md +++ /dev/null @@ -1,344 +0,0 @@ -# AI 垃圾评论检测系统架构 - -## 系统概述 - -本文档展示 Argon 主题的 AI 垃圾评论检测系统的完整架构和流程。 - -## 主流程图 - -```mermaid -flowchart TD - Start[用户提交评论] - PreProcess[预处理评论] - CheckEnabled{启用 AI 检测?} - DirectSave[直接保存评论] - CheckMode{检测模式?} - CheckKeyword[检查关键字] - CheckSample[智能抽样] - NeedCheck[需要检测] - KeywordMatch{匹配关键字?} - SampleDecision{抽中?} - SetPending[设置待审核状态] - SaveWithFlag[保存评论并标记] - TriggerDetect[触发 AI 检测] - CallAPI[调用 AI API] - ParseResult[解析结果] - CheckConfidence{置信度?} - AutoHandle[自动处理] - ManualReview[人工审核] - MarkNormal[标记正常] - CheckAction{处理方式?} - MoveTrash[移入回收站] - KeepPending[保持待审核] - JustMark[仅标记] - NotifyAdmin[通知管理员] - SaveResult[保存结果] - AILearn{启用学习?} - ExtractKeywords[提取关键词] - UpdateDB[更新词库] - End[结束] - - Start --> PreProcess - PreProcess --> CheckEnabled - CheckEnabled -->|否| DirectSave - CheckEnabled -->|是| CheckMode - CheckMode -->|manual| DirectSave - CheckMode -->|keyword| CheckKeyword - CheckMode -->|sample| CheckSample - CheckMode -->|all| NeedCheck - CheckKeyword --> KeywordMatch - KeywordMatch -->|是| NeedCheck - KeywordMatch -->|否| DirectSave - CheckSample --> SampleDecision - SampleDecision -->|是| NeedCheck - SampleDecision -->|否| DirectSave - NeedCheck --> SetPending - SetPending --> SaveWithFlag - SaveWithFlag --> TriggerDetect - TriggerDetect --> CallAPI - CallAPI --> ParseResult - ParseResult --> CheckConfidence - CheckConfidence -->|高| AutoHandle - CheckConfidence -->|中| ManualReview - CheckConfidence -->|低| MarkNormal - AutoHandle --> CheckAction - CheckAction -->|trash| MoveTrash - CheckAction -->|hold| KeepPending - CheckAction -->|mark| JustMark - MoveTrash --> NotifyAdmin - KeepPending --> NotifyAdmin - JustMark --> SaveResult - ManualReview --> SaveResult - MarkNormal --> SaveResult - NotifyAdmin --> SaveResult - SaveResult --> AILearn - AILearn -->|是| ExtractKeywords - AILearn -->|否| End - ExtractKeywords --> UpdateDB - UpdateDB --> End - DirectSave --> End - - style Start fill:#e1f5e1,stroke:#2e7d32,stroke-width:2px - style End fill:#e1f5e1,stroke:#2e7d32,stroke-width:2px - style MoveTrash fill:#ff6b6b,stroke:#c62828,stroke-width:2px - style MarkNormal fill:#95e1d3,stroke:#2e7d32,stroke-width:2px - style ManualReview fill:#ffa500,stroke:#ff8f00,stroke-width:2px -``` - -## 检测模式详解 - -```mermaid -flowchart LR - subgraph Manual[Manual 模式] - M1[关闭实时检测] - M2[仅手动扫描] - end - - subgraph Keyword[Keyword 模式] - K1[关键字触发] - K2[精准检测] - K3[低成本] - end - - subgraph Sample[Sample 模式] - S1[智能抽样] - S2[平衡准确性] - S3[控制成本] - end - - subgraph All[All 模式] - A1[全量检测] - A2[最高准确性] - A3[高成本] - end - - style Manual fill:#e3f2fd - style Keyword fill:#fff3e0 - style Sample fill:#f3e5f5 - style All fill:#fce4ec -``` - -## AI 检测流程 - -```mermaid -sequenceDiagram - participant User as 用户 - participant WP as WordPress - participant Argon as Argon 主题 - participant AI as AI API - participant DB as 数据库 - - User->>WP: 提交评论 - WP->>Argon: 触发 preprocess_comment - Argon->>Argon: 检查检测规则 - - alt 需要检测 - Argon->>DB: 保存评论(待审核) - Argon->>AI: 发送检测请求 - AI-->>Argon: 返回检测结果 - Argon->>Argon: 解析结果和置信度 - - alt 高置信度垃圾评论 - Argon->>DB: 移入回收站 - Argon->>WP: 发送通知邮件 - else 中等置信度 - Argon->>DB: 标记待人工审核 - else 正常评论 - Argon->>DB: 标记为正常 - end - - Argon->>DB: 保存检测记录 - - opt 启用 AI 学习 - Argon->>AI: 提取关键词 - AI-->>Argon: 返回关键词 - Argon->>DB: 更新学习词库 - end - else 跳过检测 - Argon->>DB: 直接保存评论 - end - - WP-->>User: 显示提交结果 -``` - -## 数据库结构 - -```mermaid -erDiagram - COMMENT ||--o{ COMMENT_META : has - COMMENT { - bigint comment_ID PK - bigint comment_post_ID FK - text comment_content - varchar comment_author - varchar comment_author_email - varchar comment_author_IP - datetime comment_date - varchar comment_approved - } - - COMMENT_META { - bigint meta_id PK - bigint comment_id FK - varchar meta_key - longtext meta_value - } - - SPAM_DETECTION ||--|| COMMENT : detects - SPAM_DETECTION { - bigint id PK - bigint comment_id FK - varchar result - float confidence - text reason - text keywords - datetime detected_at - varchar detection_code - } - - LEARNED_KEYWORDS ||--o{ SPAM_DETECTION : learns_from - LEARNED_KEYWORDS { - bigint id PK - varchar keyword - int weight - varchar category - datetime created_at - datetime updated_at - } -``` - -## 系统状态机 - -```mermaid -stateDiagram-v2 - [*] --> Submitted: 用户提交 - Submitted --> Pending: 需要检测 - Submitted --> Approved: 跳过检测 - - Pending --> Detecting: 开始检测 - Detecting --> Analyzed: 检测完成 - - Analyzed --> Spam: 高置信度垃圾 - Analyzed --> Suspicious: 中等置信度 - Analyzed --> Clean: 低置信度/正常 - - Spam --> Trash: 自动处理 - Spam --> Hold: 保持待审核 - Spam --> Marked: 仅标记 - - Suspicious --> ManualReview: 等待人工审核 - Clean --> Approved: 自动通过 - - ManualReview --> Approved: 管理员批准 - ManualReview --> Trash: 管理员拒绝 - - Hold --> Approved: 管理员批准 - Hold --> Trash: 管理员拒绝 - - Marked --> Approved: 管理员批准 - Marked --> Trash: 管理员拒绝 - - Trash --> [*] - Approved --> [*] - - note right of Detecting - 调用 AI API - 解析返回结果 - 计算置信度 - end note - - note right of ManualReview - 显示在后台 - 等待管理员操作 - end note -``` - -## 性能优化策略 - -```mermaid -flowchart TD - subgraph Input[输入优化] - I1[关键字预过滤] - I2[白名单用户] - I3[智能抽样] - end - - subgraph Process[处理优化] - P1[异步检测] - P2[批量处理] - P3[缓存结果] - end - - subgraph API[API 优化] - A1[Prompt 优化] - A2[Token 控制] - A3[超时处理] - end - - subgraph Storage[存储优化] - S1[索引优化] - S2[定期清理] - S3[归档历史] - end - - Input --> Process - Process --> API - API --> Storage - - style Input fill:#e8f5e9 - style Process fill:#e3f2fd - style API fill:#fff3e0 - style Storage fill:#f3e5f5 -``` - -## 关键技术点 - -### 1. 异步检测机制 -- 评论提交后立即返回,不阻塞用户 -- 后台异步调用 AI API 进行检测 -- 使用 WordPress Cron 或队列系统 - -### 2. 智能抽样算法 -- 基于用户历史行为的动态抽样率 -- 新用户抽样率更高 -- 可信用户抽样率降低 - -### 3. 置信度评分系统 -- 0.9-1.0:非常确定,可自动处理 -- 0.7-0.9:比较确定,建议自动处理 -- 0.5-0.7:中等确定,建议人工审核 -- 0.0-0.5:不太确定,必须人工审核 - -### 4. 学习优化机制 -- 记录管理员的审核决策 -- 分析误判模式 -- 自动调整检测策略 -- 提取高频垃圾关键词 - -### 5. 容错与降级 -- API 失败时自动降级 -- 保证评论系统正常运行 -- 记录错误日志供后续分析 - -## 配置建议 - -### 小型博客(< 100 评论/天) -- 检测模式:Sample(30%) -- Prompt 模式:Standard -- 自动处理阈值:0.9 -- 异步检测:启用 - -### 中型博客(100-500 评论/天) -- 检测模式:Sample(40%) -- Prompt 模式:Standard -- 自动处理阈值:0.85 -- 异步检测:启用 -- 批量扫描:每日一次 - -### 大型博客(> 500 评论/天) -- 检测模式:Keyword + Sample(50%) -- Prompt 模式:Minimal -- 自动处理阈值:0.8 -- 异步检测:启用 -- 批量扫描:每日两次 -- 启用缓存和队列优化 diff --git a/functions.php b/functions.php index fb12a15..7bfd2d2 100644 --- a/functions.php +++ b/functions.php @@ -2864,7 +2864,14 @@ function post_comment_preprocessing($comment){ // 检查是否触发关键字 $keyword_check = argon_check_spam_keywords($temp_comment); if ($keyword_check && $keyword_check['triggered']) { - $should_check = true; + // 如果是黑名单关键字,直接标记为垃圾评论 + if (isset($keyword_check['is_blacklist']) && $keyword_check['is_blacklist']) { + $comment['comment_approved'] = 'spam'; + $_POST['_argon_spam_blacklist_keywords'] = json_encode($keyword_check['keywords']); + } else { + // 触发关键字,需要 AI 检测 + $should_check = true; + } } // 全量检测模式 elseif ($mode === 'all') { @@ -10029,18 +10036,49 @@ function argon_detect_spam_comment_sync($comment) { /** * 检查评论是否触发关键字 * @param object $comment 评论对象 - * @return array|false ['triggered' => bool, 'keywords' => array, 'confidence' => float] + * @return array|false ['triggered' => bool, 'keywords' => array, 'confidence' => float, 'is_blacklist' => bool] */ function argon_check_spam_keywords($comment) { - // 获取关键字列表 - $keywords_text = get_option('argon_comment_spam_detection_keywords', ''); - if (empty($keywords_text)) { + // 先检查黑名单关键字(直接判定为垃圾) + $blacklist_keywords_text = get_option('argon_comment_spam_detection_keywords', ''); + if (!empty($blacklist_keywords_text)) { + $blacklist_keywords = array_filter(array_map('trim', explode("\n", $blacklist_keywords_text))); + if (!empty($blacklist_keywords)) { + $check_text = $comment->comment_author . ' ' . $comment->comment_content; + $check_text = strtolower($check_text); + + $triggered_blacklist = []; + foreach ($blacklist_keywords as $keyword) { + $keyword = strtolower(trim($keyword)); + if (empty($keyword)) { + continue; + } + + if (strpos($check_text, $keyword) !== false) { + $triggered_blacklist[] = $keyword; + } + } + + if (!empty($triggered_blacklist)) { + return [ + 'triggered' => true, + 'keywords' => $triggered_blacklist, + 'confidence' => 1.0, + 'is_blacklist' => true + ]; + } + } + } + + // 再检查触发关键字(需要 AI 检测) + $trigger_keywords_text = get_option('argon_comment_spam_detection_trigger_keywords', ''); + if (empty($trigger_keywords_text)) { return false; } // 按行分割关键字 - $keywords = array_filter(array_map('trim', explode("\n", $keywords_text))); - if (empty($keywords)) { + $trigger_keywords = array_filter(array_map('trim', explode("\n", $trigger_keywords_text))); + if (empty($trigger_keywords)) { return false; } @@ -10049,7 +10087,7 @@ function argon_check_spam_keywords($comment) { $check_text = strtolower($check_text); $triggered_keywords = []; - foreach ($keywords as $keyword) { + foreach ($trigger_keywords as $keyword) { $keyword = strtolower(trim($keyword)); if (empty($keyword)) { continue; @@ -10067,7 +10105,8 @@ function argon_check_spam_keywords($comment) { return [ 'triggered' => true, 'keywords' => $triggered_keywords, - 'confidence' => $confidence + 'confidence' => $confidence, + 'is_blacklist' => false ]; } diff --git a/settings.php b/settings.php index 629b113..4436220 100644 --- a/settings.php +++ b/settings.php @@ -2257,7 +2257,7 @@ function themeoptions_page(){ - +

@@ -2316,24 +2316,107 @@ function themeoptions_page(){ - + + + + +

- 检测所有评论:每条评论都进行 AI 检测(消耗较多 API 额度)', 'argon');?> +
+
+
+

- + - + %

- +
+
+ +

+ + + + + + + +

+
+ +

+ + + + + + + +

+
+ +

+ + + + + + + + +

+ + + + + + + +

+
+ +

+ + + + + + + +

+
+
+ +

+ + + + + + + +

+
+
+

@@ -6896,8 +6979,14 @@ function argon_update_themeoptions(){ //AI 垃圾评论识别 argon_update_option_checkbox('argon_comment_spam_detection_enable'); argon_update_option('argon_ai_spam_active_api'); - argon_update_option('argon_comment_spam_detection_realtime_mode'); + argon_update_option('argon_comment_spam_detection_mode'); + argon_update_option('argon_comment_spam_detection_sample_rate'); + argon_update_option('argon_comment_spam_detection_trigger_keywords'); argon_update_option('argon_comment_spam_detection_keywords'); + argon_update_option_checkbox('argon_comment_spam_detection_exclude_logged_in'); + argon_update_option('argon_comment_spam_detection_whitelist'); + argon_update_option('argon_comment_spam_detection_auto_action'); + argon_update_option('argon_comment_spam_detection_confidence_threshold'); argon_update_option('argon_comment_spam_detection_prompt_mode'); argon_update_option('argon_comment_spam_detection_custom_prompt'); argon_update_option('argon_comment_spam_detection_auto_threshold'); diff --git a/settings.php.backup b/settings.php.backup deleted file mode 100644 index a47109f..0000000 --- a/settings.php.backup +++ /dev/null @@ -1,6670 +0,0 @@ - - - - - - - - - - -
- - - - - -

- - - - - - - - - - solstice23/argon-theme - - - -

- -

- -

Ctrl + F

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - " style="height:40px;width: 80px;cursor: pointer;"/> - - " style="height: 40px;width: 80px;vertical-align: bottom;background: #fff;cursor: pointer;" onclick="$('input[name=\'argon_theme_color\']').click()"/>

- -

- -

- -
- -
Argon ()
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- - - - - - - - - -
- - - -
- -

- -
- - - -

页面背景、卡片及页面上的其它元素会变为沉浸式主题色(气氛色)。类似 Material You。', 'argon');?>

- -
- -
- -
- -
- -
- - - -

- - - -


- -
- - - -

- -

- - px - -

4px 2px - 15px

- -
- -
- - - - - - - -
- -

- -

- -
- - - - - - - -
- -

- -

- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -


- -
- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -



- -
- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
-

- -
- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -

- -

- - - - - -

- -

%theme_version% 来表示主题版本号。', 'argon');?>

- -

- - - -

/blog/ /

- -

- - - -

- -

- - - -



- -

- -

- -

--hidden-- 可以隐藏标题', 'argon');?>

- -

- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -

- - - -





- -
- - - -
- - - -
- -


- -
- - - -


--bing--

- -
- - - - - - - -

- -

- -
- - - - - - - - - - - - - - - -
- - - -

- -

- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -

- -
- -
- -
- -
- - -
-

-
- - -
- -
- - -
-

-
- - -
- -
- - px -
-

-
- - -
- -
- - % -
-

-
-
- - -
- - -
- - - -
-
- - -
-
-
-

- -

-
-
- - - -

- - - -

- -
- - - -


--hitokoto--

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -

SEO

- - - -


- -
- - - -

- -

- - - - - - - - - -

- - - -
- - - - - -

- -
- - - - - -
- - - - - -

- -

- - - -

- -
- - - -

- -

- -

-
- -

-
- -

-
- -

-
- - - -

-
-
-
- -

- - -
- -

-
- -

-
- -

- -

- - "/> - -

使用 ref 短代码可以在文中插入脚注。', 'argon');?>

- -

- - - -

- -

- - - -

- -

- - - -

- -

- - - -


%url% 来代替当前页面 URL,%link% 来代替当前页面链接,%title% 来代替当前文章标题,%author% 来代替当前文章作者。', 'argon');?>

- -
- -
- -
- -
- - - -

- -

- - - -

:
- -

- -
- -
- - - -

- -

- - - - - - - - - - - - - - - -
- - - -


%date_delta% %post_date_delta% %modify_date_delta%

- -

- -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -
- - - -
- - - -

- -
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- -

- -

Lazyload

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

,

- -

- - - -

- -
- -

Pangu.js

- - - -

- -

- -

-

- -


- - window.pjaxLoaded
: - -

-
-window.pjaxLoaded = function(){
-
-	//
-
-	//do something...
-
-}
-
-							
- - window.pjaxLoaded window.pjaxLoaded();

- -
- - - -


- -
- - - -


- -

- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- -
- - 最后一页,在每个页面顶部显示新的评论"。', 'argon');?> >>> - - $(".go-to-wp-comment-settings").addClass("wrong-options");'; - - };?> - - - - - -

- -

- - - -


- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -

- - - -

-
- •
- •
- • -

- -
- - / - - -

- -
- - / - - -

- -
- - / - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -
- - - -
- -

- -
- - - -

- -

- - -


-
- -

-
-
- -

-
- % -

-
-
- -

-
- -

-
-
- -

-
- - -

-
- -

-
- -

-
- - -

- -
-
- - - -
- - -

-
- -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -


gravatar.pho.ink/avatar/ , cdn.v2ex.com/gravatar/ , dn-qiniu-avatar.qbox.me/avatar/

- -
- - - -

- -
- - - -

- -
- - - - - -
- - - -
- -
- -
- - - -
- - true, - - ), 'objects'); - - foreach ($all_post_types as $post_type) { - - if ($post_type -> name == 'attachment'){ - - continue; - - } - - echo '
'. $post_type -> label .'
'; - - } - - ?> - -
- -
- -

- - -

-
- - -

- -
- -

-
- -

-
- -
- - -
-
- - -
-
- - -
-
- - -
-

-

- -
-
- - - -
- - $type_info): - $config = argon_get_email_template_config($type_key); - ?> -
-
- -
- -
- - -
- -
- - -
- -
- -
- $desc): ?> - {{}} - -
-

-
- -
- - -
-
- -
- - - - - -
- -

-
- -

-
- -

-
- -

-
- -

-
-

- -

- - - -

- -
- - - -


- -

分类
"; - - $categories = get_categories(array( - - 'hide_empty' => 0, - - 'hierarchical' => 0, - - 'taxonomy' => 'category' - - )); - - foreach($categories as $category) { - - echo "".$category -> name ." -> ". $category -> term_id .""; - - } - - echo "
Tag
"; - - $categories = get_categories(array( - - 'hide_empty' => 0, - - 'hierarchical' => 0, - - 'taxonomy' => 'post_tag' - - )); - - foreach($categories as $category) { - - echo "".$category -> name ." -> ". $category -> term_id .""; - - } - - echo ""; - - ?> - - - -

- -
- - - -

- -
- -

- -
- - 个人资料页面将 "管理界面配色方案" 设为 "Argon" 即可开启。', 'argon'), admin_url('profile.php'));?> - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - - - -

- - - - - - - -

- - - - - - - - - -
- - - - - -
- - - -
- - 0) { - $remaining = max(0, 3600 - (time() - $enabled_time)); - } - ?> - -
- -
- - - - - - - - ' . floor($remaining / 60) . ':' . str_pad($remaining % 60, 2, '0', STR_PAD_LEFT) . ''); ?> - - - - - - - - - -
- - - -
- -

- -
- - - -

- - - -
- - - - - -

- - - - - - - -
- - () - -
- - $error): ?> - -
- -
100 ? '...' : ''; ?>
- -
- - - -
- - - -
- - - -
- - - -
- - - - - -
- - - -

- -
- -

- - - - - - - -

- -
- -
- -
- - - -
- -
- -
- -
- - - - - - argon_normalize_social_url('twitter', isset($_POST['argon_email_social_twitter']) ? sanitize_text_field($_POST['argon_email_social_twitter']) : ''), - 'github' => argon_normalize_social_url('github', isset($_POST['argon_email_social_github']) ? sanitize_text_field($_POST['argon_email_social_github']) : ''), - 'weibo' => argon_normalize_social_url('weibo', isset($_POST['argon_email_social_weibo']) ? sanitize_text_field($_POST['argon_email_social_weibo']) : ''), - 'bilibili' => argon_normalize_social_url('bilibili', isset($_POST['argon_email_social_bilibili']) ? sanitize_text_field($_POST['argon_email_social_bilibili']) : '') - ); - update_option('argon_email_social_links', $social_links); - - // 保存邮件模板配置 - $email_types = array('comment_notify', 'reply_notify', 'user_register', 'password_reset', 'todo_urge', 'general'); - foreach ($email_types as $type) { - // 保存启用状态 - argon_update_option_checkbox('argon_email_template_' . $type . '_enabled'); - // 保存主题 - argon_update_option('argon_email_template_' . $type . '_subject'); - // 保存内容(允许 HTML) - argon_update_option_allow_tags('argon_email_template_' . $type . '_content'); - } - - argon_update_option('argon_hide_footer_author'); - - argon_update_option('argon_card_radius'); - - argon_update_option('argon_comment_avatar_vcenter'); - - argon_update_option('argon_pjax_disabled'); - - argon_update_option('argon_comment_allow_markdown'); - - argon_update_option('argon_comment_allow_editing'); - - argon_update_option('argon_comment_allow_privatemode'); - - argon_update_option('argon_comment_allow_mailnotice'); - - argon_update_option_checkbox('argon_comment_mailnotice_checkbox_checked'); - - argon_update_option('argon_comment_pagination_type'); - - argon_update_option('argon_who_can_visit_comment_edit_history'); - - argon_update_option('argon_home_show_shuoshuo'); - - argon_update_option('argon_enable_search_filters'); - - argon_update_option('argon_search_filters_type'); - - argon_update_option('argon_darkmode_autoswitch'); - - argon_update_option('argon_enable_amoled_dark'); - - argon_update_option('argon_outdated_info_time_type'); - - argon_update_option('argon_outdated_info_days'); - - argon_update_option('argon_outdated_info_tip_type'); - - argon_update_option('argon_outdated_info_tip_content'); - - argon_update_option_checkbox('argon_show_toolbar_mask'); - - argon_update_option('argon_enable_banner_title_typing_effect'); - - argon_update_option('argon_banner_typing_effect_interval'); - - argon_update_option('argon_page_layout'); - - argon_update_option('argon_article_list_layout'); - - argon_update_option('argon_article_list_layout_mobile'); - - argon_update_option('argon_enable_pangu'); - - argon_update_option('argon_assets_path'); - - argon_update_option('argon_custom_assets_path'); - - argon_update_option('argon_comment_ua'); - - argon_update_option('argon_wp_path'); - - argon_update_option('argon_dateformat'); - - argon_update_option('argon_font'); - - argon_update_option('argon_card_shadow'); - - argon_update_option('argon_enable_code_highlight'); - - argon_update_option('argon_code_highlight_hide_linenumber'); - - argon_update_option('argon_code_highlight_transparent_linenumber'); - - argon_update_option('argon_code_highlight_break_line'); - - argon_update_option('argon_code_theme'); - - argon_update_option('argon_comment_enable_qq_avatar'); - - argon_update_option('argon_enable_login_css'); - - argon_update_option('argon_hide_categories'); - - argon_update_option('argon_article_meta'); - - argon_update_option('argon_fold_long_comments'); - - argon_update_option('argon_fold_long_shuoshuo'); - - argon_update_option('argon_first_image_as_thumbnail_by_default'); - - argon_update_option('argon_enable_headroom'); - - argon_update_option('argon_comment_emotion_keyboard'); - - argon_update_option_allow_tags('argon_additional_content_after_post'); - - argon_update_option('argon_related_post'); - - argon_update_option('argon_related_post_sort_orderby'); - - argon_update_option('argon_related_post_sort_order'); - - argon_update_option('argon_related_post_limit'); - - argon_update_option('argon_article_header_style'); - - argon_update_option('argon_text_gravatar'); - - argon_update_option('argon_disable_googlefont'); - - argon_update_option('argon_disable_codeblock_style'); - - argon_update_option('argon_reference_list_title'); - - argon_update_option('argon_trim_words_count'); - - argon_update_option('argon_enable_comment_upvote'); - - argon_update_option('argon_article_list_waterflow'); - - argon_update_option('argon_banner_size'); - - argon_update_option('argon_toolbar_blur'); - - argon_update_option('argon_toolbar_style'); - - argon_update_option('argon_toolbar_shadow'); - - argon_update_option('argon_toolbar_border'); - - argon_update_option('argon_toolbar_compact'); - - argon_update_option('argon_toolbar_center'); - - argon_update_option('argon_toolbar_links_left'); - - argon_update_option('argon_toolbar_links_right'); - - argon_update_option('argon_archives_timeline_show_month'); - - argon_update_option('argon_archives_timeline_url'); - - argon_update_option('argon_enable_immersion_color'); - - argon_update_option('argon_enable_comment_pinning'); - - argon_update_option('argon_show_comment_parent_info'); - - - - //LazyLoad 相关 - - argon_update_option('argon_enable_lazyload'); - - argon_update_option('argon_lazyload_effect'); - - argon_update_option('argon_lazyload_threshold'); - - argon_update_option('argon_lazyload_loading_style'); - - - - //图片缩放预览相关 - - argon_update_option('argon_enable_fancybox'); - - argon_update_option('argon_enable_zoomify'); - - argon_update_option('argon_zoomify_duration'); - - argon_update_option('argon_zoomify_easing'); - - argon_update_option('argon_zoomify_scale'); - - - - //数学公式相关配置项 - - argon_update_option('argon_math_render'); - - argon_update_option('argon_mathjax_cdn_url'); - - argon_update_option('argon_mathjax_v2_cdn_url'); - - argon_update_option('argon_katex_cdn_url'); - - argon_update_option_checkbox('argon_mathjax3_use_local'); - - argon_update_option_checkbox('argon_mathjax2_use_local'); - - argon_update_option_checkbox('argon_katex_use_local'); - - - - //页头页尾脚本 - - argon_update_option_allow_tags('argon_custom_html_head'); - - argon_update_option_allow_tags('argon_custom_html_foot'); - - - - //公告 - - argon_update_option_allow_tags('argon_sidebar_announcement'); - - //AI 摘要 - argon_update_option_checkbox('argon_ai_summary_enable'); - argon_update_option('argon_ai_summary_provider'); - argon_update_option('argon_ai_summary_api_key'); - argon_update_option('argon_ai_summary_api_endpoint'); - argon_update_option('argon_ai_summary_model'); - argon_update_option('argon_ai_summary_prompt'); - argon_update_option('argon_ai_summary_exclude_ids'); - - //AI 垃圾评论识别 - argon_update_option_checkbox('argon_comment_spam_detection_enable'); - argon_update_option('argon_comment_spam_detection_prompt'); - argon_update_option('argon_comment_spam_detection_mode'); - argon_update_option('argon_comment_spam_detection_sample_rate'); - argon_update_option('argon_comment_spam_detection_auto_action'); - argon_update_option('argon_comment_spam_detection_whitelist'); - argon_update_option_checkbox('argon_comment_spam_detection_exclude_logged_in'); - - } - -} - -argon_update_themeoptions(); - -?> diff --git a/settings.php.backup_before_ai_refactor b/settings.php.backup_before_ai_refactor deleted file mode 100644 index bbd613b..0000000 --- a/settings.php.backup_before_ai_refactor +++ /dev/null @@ -1,7812 +0,0 @@ - - - - - - - - - - -
- - - - - -

- - - - - - - - - - solstice23/argon-theme - - - -

- -

- -

Ctrl + F

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 'OpenAI (ChatGPT)', - 'anthropic' => 'Anthropic (Claude)', - 'deepseek' => 'DeepSeek', - 'xiaomi' => __('小米 Mimo', 'argon'), - 'qianwen' => __('通义千问', 'argon'), - 'wenxin' => __('文心一言', 'argon'), - 'doubao' => __('豆包 (火山引擎)', 'argon'), - 'kimi' => 'Kimi (Moonshot)', - 'zhipu' => __('智谱 AI (GLM)', 'argon'), - 'siliconflow' => __('硅基流动 (SiliconFlow)', 'argon') - ]; - - // 显示所有提供商的 API 配置 - foreach ($providers as $provider_key => $provider_name) { - // 获取该提供商的所有 API 配置 - $apis = argon_get_provider_apis($provider_key); - $active_api_id = get_option("argon_ai_{$provider_key}_active_api", ''); - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - " style="height:40px;width: 80px;cursor: pointer;"/> - - " style="height: 40px;width: 80px;vertical-align: bottom;background: #fff;cursor: pointer;" onclick="$('input[name=\'argon_theme_color\']').click()"/>

- -

- -

- -
- -
Argon ()
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- - - - - - - - - -
- - - -
- -

- -
- - - -

页面背景、卡片及页面上的其它元素会变为沉浸式主题色(气氛色)。类似 Material You。', 'argon');?>

- -
- -
- -
- -
- -
- - - -

- - - -


- -
- - - -

- -

- - px - -

4px 2px - 15px

- -
- -
- - - - - - - -
- -

- -

- -
- - - - - - - -
- -

- -

- - - -

- -
- - - -

- -
- - - -

- -

- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -


- -
- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -



- -
- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
-

- -
- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -

- -

- - - -



- -

- -

- -

--hidden-- 可以隐藏标题', 'argon');?>

- -

- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -

- - - -





- -
- - - -
- - - -
- -


- -
- - - -


--bing--

- -
- - - - - - - -

- -

- -
- - - - - - - - - - - - - - - -
- - - -

- -

- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -

- -
- -
- -
- -
- - -
-

-
- - -
- -
- - -
-

-
- - -
- -
- - px -
-

-
- - -
- -
- - % -
-

-
-
- - -
- - -
- - - -
-
- - -
-
-
-

- -

-
-
- - - -

- - - -

- -
- - - -


--hitokoto--

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

SEO

- - - -


- -
- - - -

- -

- - - - - -

- -

%theme_version% 来表示主题版本号。', 'argon');?>

- -
- - - -

/blog/ /

- -

- - - -

- -

- - - - - - - - - -

- - - -
- - - - - -

- -
- - - - - -
- - - - - -

- -

- - - -

- -
- - - -

- -

- -

-
- -

-
-
- -
-
- $api): ?> -
- -
- -
-
- -

- - - - - - - - - -
-
-

- - -

- - -
- -

-
- -

-
- -

- -
- - - -

-

- - "/> - -

使用 ref 短代码可以在文中插入脚注。', 'argon');?>

- -

- - - -

- -

- - - -

- -

- - - -

- -

- - - -


%url% 来代替当前页面 URL,%link% 来代替当前页面链接,%title% 来代替当前文章标题,%author% 来代替当前文章作者。', 'argon');?>

- -
- -
- -
- -
- - - -

- -

- - - -

:
- -

- -
- -
- - - -

- -

- - - - - - - - - - - - - - - -
- - - -


%date_delta% %post_date_delta% %modify_date_delta%

- -

- -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -
- - - -
- - - -

- -
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- -

- -

Lazyload

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

,

- -

- - - -

- -
- -

Pangu.js

- - - -

- -

- - -

-
- -

-
- -

-

- -

-

- - -

-
- - -

-
- - -
-

- -

- -
- -
    - -
  • ✓ WP Githuber MD
  • - - -
  • ✓ Markdown Block
  • - - -
  • ✓ Code Syntax Block
  • - - -
  • - -
-
- - -

- - -

- - -

- - -

-
- -

- -

-

-
-
- - -
- -
- - -
- -
- - -
- -
- -
-

- -

-
-
- - -
- -

- -

- - -

- -


- - window.pjaxLoaded
: - -

-
-window.pjaxLoaded = function(){
-
-	//
-
-	//do something...
-
-}
-
-							
- - window.pjaxLoaded window.pjaxLoaded();

- -
- - - -


- -
- - - -


- -

- - - -

- -
- -
- - 最后一页,在每个页面顶部显示新的评论"。', 'argon');?> >>> - - $(".go-to-wp-comment-settings").addClass("wrong-options");'; - - };?> - - - - - -

- -

- - - -


- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -

- - - -

-
- •
- •
- • -

- -
- - / - - -

- -
- - / - - -

- -
- - / - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -
- - - -
- -

- -
- - - -

- -

- - -

-
- -

-
-
- - -

-
-
-
- -

-
- -
- - % -

-
-
-
- -

-
-
-
- - -

-
-
-
- 70% 且出现 >= 3 次的关键词自动加入下方列表', 'argon');?> -

-
- - - -

-
-
-
- 加微信, 联系QQ, 点击链接, 免费领取, 刷单, 兼职 -

- - '; - echo '

' . __('AI 学习到的关键字', 'argon') . '

'; - echo '
'; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - - // 按置信度排序 - uasort($learned_keywords, function($a, $b) { - return $b['confidence'] <=> $a['confidence']; - }); - - $current_keywords_array = array_filter(array_map('trim', explode("\n", get_option('argon_comment_spam_detection_keywords', '')))); - - foreach ($learned_keywords as $keyword => $stats) { - $confidence = round($stats['confidence'] * 100); - $color = $confidence >= 70 ? '#48bb78' : ($confidence >= 50 ? '#ed8936' : '#a0aec0'); - $is_added = in_array($keyword, $current_keywords_array); - - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - } - echo '
' . __('关键字', 'argon') . '' . __('垃圾', 'argon') . '' . __('正常', 'argon') . '' . __('置信度', 'argon') . '' . __('状态', 'argon') . '
' . esc_html($keyword) . '' . $stats['spam_count'] . '' . $stats['normal_count'] . '' . $confidence . '%'; - if ($is_added) { - echo '✓ ' . __('已添加', 'argon') . ''; - } elseif ($confidence >= 70 && $stats['spam_count'] >= 3) { - echo '⚠ ' . __('待添加', 'argon') . ''; - } else { - echo '○ ' . __('观察中', 'argon') . ''; - } - echo '
'; - echo '

'; - echo __('• 绿色:置信度 ≥ 70%,已自动添加到关键字列表', 'argon') . '
'; - echo __('• 橙色:置信度 50-70%,观察中', 'argon') . '
'; - echo __('• 灰色:置信度 < 50%,数据不足', 'argon'); - echo '

'; - echo ''; - } - ?> -
- -

-
-
- -

-
- - -

-
- -

-
- -

-
- -

- :
- :
- :
- : -

- -
- - - -

-
- - -
- -

-
-
- -

-
- -

- :
- :
- -

-
-
- - - -
-

- ():
- ():
- ( 500/天', 'argon');?>): -

- -
-
- - - -
- - -

-
- -

- -
- get_statistics(); - $error_handler = new Argon_Spam_API_Error_Handler(); - $api_status = $error_handler->get_status(); - ?> -
-

-

- : - - % - - ( ) -

-

- : - - % - - ( ) -

-
- - -
-

-
-
- : -

- -
- - -

-
- -

- - -
- get_errors(10); - if (empty($errors)): ?> -

- -
- -
-

- - - - -

-

- -

-
- -
- - - -

- -

- - -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -


gravatar.pho.ink/avatar/ , cdn.v2ex.com/gravatar/ , dn-qiniu-avatar.qbox.me/avatar/

- -
- - - -

- -
- - - -

- -
- - - - - -
- - - -
- -
- -
- - - -
- - true, - - ), 'objects'); - - foreach ($all_post_types as $post_type) { - - if ($post_type -> name == 'attachment'){ - - continue; - - } - - echo '
'. $post_type -> label .'
'; - - } - - ?> - -
- -
- -

- - -

-
- - -

- -
- -

-
- -

-
- -
- - -
-
- - -
-
- - -
-
- - -
-

-

- -
-
- - - -
- - $type_info): - $config = argon_get_email_template_config($type_key); - ?> -
-
- -
- -
- - -

-
- -
- - -

-
- -
- -
- $desc): ?> - - {{}} - - - - -
-

-
- -
- -
-
:
-
:
-
-
-
- -
- - -
-
- -
- - - - - -
- -

-
- -

-
- -

-
- -

-
- -

-
-

- -

- - - -

- -
- - - -


- -

分类
"; - - $categories = get_categories(array( - - 'hide_empty' => 0, - - 'hierarchical' => 0, - - 'taxonomy' => 'category' - - )); - - foreach($categories as $category) { - - echo "".$category -> name ." -> ". $category -> term_id .""; - - } - - echo "
Tag
"; - - $categories = get_categories(array( - - 'hide_empty' => 0, - - 'hierarchical' => 0, - - 'taxonomy' => 'post_tag' - - )); - - foreach($categories as $category) { - - echo "".$category -> name ." -> ". $category -> term_id .""; - - } - - echo ""; - - ?> - - - -

- -
- - - -

- -
- -

- -
- - 个人资料页面将 "管理界面配色方案" 设为 "Argon" 即可开启。', 'argon'), admin_url('profile.php'));?> - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - - - -

- - - - - - - -

- - - - - - - - - -
- - - - - -
- - - -
- - 0) { - $remaining = max(0, 3600 - (time() - $enabled_time)); - } - ?> - -
- -
- - - - - - - - ' . floor($remaining / 60) . ':' . str_pad($remaining % 60, 2, '0', STR_PAD_LEFT) . ''); ?> - - - - - - - - - -
- - - -
- -

- -
- - - -

- - - -
- - - - - -

- - - - - - - -
- - () - -
- - $error): ?> - -
- -
100 ? '...' : ''; ?>
- -
- - - -
- - - -
- - - -
- - - -
- - - - - -
- - - -

- -
- -

- - - - - - - -

- -
- -
- -
- - - -
- -
- -
- -
- - - - - - argon_normalize_social_url('twitter', isset($_POST['argon_email_social_twitter']) ? sanitize_text_field($_POST['argon_email_social_twitter']) : ''), - 'github' => argon_normalize_social_url('github', isset($_POST['argon_email_social_github']) ? sanitize_text_field($_POST['argon_email_social_github']) : ''), - 'weibo' => argon_normalize_social_url('weibo', isset($_POST['argon_email_social_weibo']) ? sanitize_text_field($_POST['argon_email_social_weibo']) : ''), - 'bilibili' => argon_normalize_social_url('bilibili', isset($_POST['argon_email_social_bilibili']) ? sanitize_text_field($_POST['argon_email_social_bilibili']) : '') - ); - update_option('argon_email_social_links', $social_links); - - // 保存邮件模板配置 - $email_types = array('comment_notify', 'spam_notify', 'reply_notify', 'todo_urge'); - foreach ($email_types as $type) { - // 保存启用状态 - argon_update_option_checkbox('argon_email_template_' . $type . '_enabled'); - // 保存主题 - argon_update_option('argon_email_template_' . $type . '_subject'); - // 保存内容(允许 HTML) - argon_update_option_allow_tags('argon_email_template_' . $type . '_content'); - } - - argon_update_option('argon_hide_footer_author'); - - argon_update_option('argon_card_radius'); - - argon_update_option('argon_comment_avatar_vcenter'); - - argon_update_option('argon_pjax_disabled'); - - argon_update_option('argon_comment_allow_markdown'); - - argon_update_option('argon_comment_allow_editing'); - - argon_update_option('argon_comment_allow_privatemode'); - - argon_update_option('argon_comment_allow_mailnotice'); - - argon_update_option_checkbox('argon_comment_mailnotice_checkbox_checked'); - - argon_update_option('argon_comment_pagination_type'); - - argon_update_option('argon_who_can_visit_comment_edit_history'); - - argon_update_option('argon_home_show_shuoshuo'); - - argon_update_option('argon_enable_search_filters'); - - argon_update_option('argon_search_filters_type'); - - argon_update_option('argon_darkmode_autoswitch'); - - argon_update_option('argon_enable_amoled_dark'); - - argon_update_option('argon_outdated_info_time_type'); - - argon_update_option('argon_outdated_info_days'); - - argon_update_option('argon_outdated_info_tip_type'); - - argon_update_option('argon_outdated_info_tip_content'); - - argon_update_option_checkbox('argon_show_toolbar_mask'); - - argon_update_option('argon_enable_banner_title_typing_effect'); - - argon_update_option('argon_banner_typing_effect_interval'); - - argon_update_option('argon_page_layout'); - - argon_update_option('argon_article_list_layout'); - - argon_update_option('argon_article_list_layout_mobile'); - - argon_update_option('argon_enable_pangu'); - - // Mermaid 图表配置 - argon_update_option_checkbox('argon_enable_mermaid'); - argon_update_option('argon_mermaid_cdn_source'); - argon_update_option('argon_mermaid_cdn_custom_url'); - argon_update_option('argon_mermaid_theme'); - argon_update_option_checkbox('argon_mermaid_use_local'); - argon_update_option_checkbox('argon_mermaid_debug_mode'); - - argon_update_option('argon_assets_path'); - - argon_update_option('argon_custom_assets_path'); - - argon_update_option('argon_comment_ua'); - - argon_update_option('argon_wp_path'); - - argon_update_option('argon_dateformat'); - - argon_update_option('argon_font'); - - argon_update_option('argon_card_shadow'); - - argon_update_option('argon_enable_code_highlight'); - - argon_update_option('argon_code_highlight_hide_linenumber'); - - argon_update_option('argon_code_highlight_transparent_linenumber'); - - argon_update_option('argon_code_highlight_break_line'); - - argon_update_option('argon_code_theme'); - - argon_update_option('argon_comment_enable_qq_avatar'); - - argon_update_option('argon_enable_login_css'); - - argon_update_option('argon_hide_categories'); - - argon_update_option('argon_article_meta'); - - argon_update_option('argon_fold_long_comments'); - - argon_update_option('argon_fold_long_shuoshuo'); - - argon_update_option('argon_first_image_as_thumbnail_by_default'); - - argon_update_option('argon_enable_headroom'); - - argon_update_option('argon_comment_emotion_keyboard'); - - argon_update_option_allow_tags('argon_additional_content_after_post'); - - argon_update_option('argon_related_post'); - - argon_update_option('argon_related_post_sort_orderby'); - - argon_update_option('argon_related_post_sort_order'); - - argon_update_option('argon_related_post_limit'); - - argon_update_option('argon_article_header_style'); - - argon_update_option('argon_text_gravatar'); - - argon_update_option('argon_disable_googlefont'); - - argon_update_option('argon_disable_codeblock_style'); - - argon_update_option('argon_reference_list_title'); - - argon_update_option('argon_trim_words_count'); - - argon_update_option('argon_enable_comment_upvote'); - - argon_update_option('argon_article_list_waterflow'); - - argon_update_option('argon_banner_size'); - - argon_update_option('argon_toolbar_blur'); - - argon_update_option('argon_toolbar_style'); - - argon_update_option('argon_toolbar_shadow'); - - argon_update_option('argon_toolbar_border'); - - argon_update_option('argon_toolbar_compact'); - - argon_update_option('argon_toolbar_center'); - - argon_update_option('argon_toolbar_links_left'); - - argon_update_option('argon_toolbar_links_right'); - - argon_update_option('argon_archives_timeline_show_month'); - - argon_update_option('argon_archives_timeline_url'); - - argon_update_option('argon_enable_immersion_color'); - - argon_update_option('argon_enable_comment_pinning'); - - argon_update_option('argon_show_comment_parent_info'); - - - - //LazyLoad 相关 - - argon_update_option('argon_enable_lazyload'); - - argon_update_option('argon_lazyload_effect'); - - argon_update_option('argon_lazyload_threshold'); - - argon_update_option('argon_lazyload_loading_style'); - - //图片缩放预览相关 - - argon_update_option('argon_enable_fancybox'); - - argon_update_option('argon_enable_zoomify'); - - argon_update_option('argon_zoomify_duration'); - - argon_update_option('argon_zoomify_easing'); - - argon_update_option('argon_zoomify_scale'); - - - - //数学公式相关配置项 - - argon_update_option('argon_math_render'); - - argon_update_option('argon_mathjax_cdn_url'); - - argon_update_option('argon_mathjax_v2_cdn_url'); - - argon_update_option('argon_katex_cdn_url'); - - argon_update_option_checkbox('argon_mathjax3_use_local'); - - argon_update_option_checkbox('argon_mathjax2_use_local'); - - argon_update_option_checkbox('argon_katex_use_local'); - - - - //页头页尾脚本 - - argon_update_option_allow_tags('argon_custom_html_head'); - - argon_update_option_allow_tags('argon_custom_html_foot'); - - - - //公告 - - argon_update_option_allow_tags('argon_sidebar_announcement'); - - //AI 摘要 - argon_update_option_checkbox('argon_ai_summary_enable'); - argon_update_option('argon_ai_summary_provider'); - argon_update_option('argon_ai_summary_prompt'); - argon_update_option('argon_ai_summary_exclude_ids'); - - // 保存所有提供商的多 API 配置 - $providers = ['openai', 'anthropic', 'deepseek', 'xiaomi', 'qianwen', 'wenxin', 'doubao', 'kimi', 'zhipu', 'siliconflow']; - foreach ($providers as $provider) { - // 保存 API 配置数组 - if (isset($_POST["argon_ai_{$provider}_apis"])) { - $apis_json = stripslashes($_POST["argon_ai_{$provider}_apis"]); - $apis = json_decode($apis_json, true); - if (is_array($apis)) { - update_option("argon_ai_{$provider}_apis", $apis); - } - } - - // 保存当前激活的 API ID - if (isset($_POST["argon_ai_{$provider}_active_api"])) { - update_option("argon_ai_{$provider}_active_api", sanitize_text_field($_POST["argon_ai_{$provider}_active_api"])); - } - } - - //AI 垃圾评论识别 - argon_update_option_checkbox('argon_comment_spam_detection_enable'); - argon_update_option('argon_comment_spam_detection_prompt_mode'); - argon_update_option('argon_comment_spam_detection_confidence_threshold'); - argon_update_option('argon_comment_spam_detection_privacy_level'); - argon_update_option('argon_comment_spam_detection_prompt'); - argon_update_option('argon_comment_spam_detection_mode'); - argon_update_option('argon_comment_spam_detection_sample_rate'); - argon_update_option('argon_comment_spam_detection_auto_action'); - argon_update_option('argon_comment_spam_detection_whitelist'); - argon_update_option_checkbox('argon_comment_spam_detection_exclude_logged_in'); - argon_update_option('argon_comment_spam_detection_keywords'); - argon_update_option_checkbox('argon_comment_spam_detection_ai_learn'); - - } - -} - -argon_update_themeoptions(); - -?> diff --git a/settings.php.backup_before_ui_refactor b/settings.php.backup_before_ui_refactor deleted file mode 100644 index bbd613b..0000000 --- a/settings.php.backup_before_ui_refactor +++ /dev/null @@ -1,7812 +0,0 @@ - - - - - - - - - - -
- - - - - -

- - - - - - - - - - solstice23/argon-theme - - - -

- -

- -

Ctrl + F

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 'OpenAI (ChatGPT)', - 'anthropic' => 'Anthropic (Claude)', - 'deepseek' => 'DeepSeek', - 'xiaomi' => __('小米 Mimo', 'argon'), - 'qianwen' => __('通义千问', 'argon'), - 'wenxin' => __('文心一言', 'argon'), - 'doubao' => __('豆包 (火山引擎)', 'argon'), - 'kimi' => 'Kimi (Moonshot)', - 'zhipu' => __('智谱 AI (GLM)', 'argon'), - 'siliconflow' => __('硅基流动 (SiliconFlow)', 'argon') - ]; - - // 显示所有提供商的 API 配置 - foreach ($providers as $provider_key => $provider_name) { - // 获取该提供商的所有 API 配置 - $apis = argon_get_provider_apis($provider_key); - $active_api_id = get_option("argon_ai_{$provider_key}_active_api", ''); - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - " style="height:40px;width: 80px;cursor: pointer;"/> - - " style="height: 40px;width: 80px;vertical-align: bottom;background: #fff;cursor: pointer;" onclick="$('input[name=\'argon_theme_color\']').click()"/>

- -

- -

- -
- -
Argon ()
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- - - - - - - - - -
- - - -
- -

- -
- - - -

页面背景、卡片及页面上的其它元素会变为沉浸式主题色(气氛色)。类似 Material You。', 'argon');?>

- -
- -
- -
- -
- -
- - - -

- - - -


- -
- - - -

- -

- - px - -

4px 2px - 15px

- -
- -
- - - - - - - -
- -

- -

- -
- - - - - - - -
- -

- -

- - - -

- -
- - - -

- -
- - - -

- -

- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -


- -
- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -



- -
- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
-

- -
- -
- - - -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -
- -
- - - -
- - - -
- -

- -

- - - -



- -

- -

- -

--hidden-- 可以隐藏标题', 'argon');?>

- -

- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -

- - - -





- -
- - - -
- - - -
- -


- -
- - - -


--bing--

- -
- - - - - - - -

- -

- -
- - - - - - - - - - - - - - - -
- - - -

- -

- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -

- -
- -
- -
- -
- - -
-

-
- - -
- -
- - -
-

-
- - -
- -
- - px -
-

-
- - -
- -
- - % -
-

-
-
- - -
- - -
- - - -
-
- - -
-
-
-

- -

-
-
- - - -

- - - -

- -
- - - -


--hitokoto--

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

SEO

- - - -


- -
- - - -

- -

- - - - - -

- -

%theme_version% 来表示主题版本号。', 'argon');?>

- -
- - - -

/blog/ /

- -

- - - -

- -

- - - - - - - - - -

- - - -
- - - - - -

- -
- - - - - -
- - - - - -

- -

- - - -

- -
- - - -

- -

- -

-
- -

-
-
- -
-
- $api): ?> -
- -
- -
-
- -

- - - - - - - - - -
-
-

- - -

- - -
- -

-
- -

-
- -

- -
- - - -

-

- - "/> - -

使用 ref 短代码可以在文中插入脚注。', 'argon');?>

- -

- - - -

- -

- - - -

- -

- - - -

- -

- - - -


%url% 来代替当前页面 URL,%link% 来代替当前页面链接,%title% 来代替当前文章标题,%author% 来代替当前文章作者。', 'argon');?>

- -
- -
- -
- -
- - - -

- -

- - - -

:
- -

- -
- -
- - - -

- -

- - - - - - - - - - - - - - - -
- - - -


%date_delta% %post_date_delta% %modify_date_delta%

- -

- -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -
- - - -
- - - -

- -
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- -

- -

Lazyload

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

,

- -

- - - -

- -
- -

Pangu.js

- - - -

- -

- - -

-
- -

-
- -

-

- -

-

- - -

-
- - -

-
- - -
-

- -

- -
- -
    - -
  • ✓ WP Githuber MD
  • - - -
  • ✓ Markdown Block
  • - - -
  • ✓ Code Syntax Block
  • - - -
  • - -
-
- - -

- - -

- - -

- - -

-
- -

- -

-

-
-
- - -
- -
- - -
- -
- - -
- -
- -
-

- -

-
-
- - -
- -

- -

- - -

- -


- - window.pjaxLoaded
: - -

-
-window.pjaxLoaded = function(){
-
-	//
-
-	//do something...
-
-}
-
-							
- - window.pjaxLoaded window.pjaxLoaded();

- -
- - - -


- -
- - - -


- -

- - - -

- -
- -
- - 最后一页,在每个页面顶部显示新的评论"。', 'argon');?> >>> - - $(".go-to-wp-comment-settings").addClass("wrong-options");'; - - };?> - - - - - -

- -

- - - -


- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -

- - - -

-
- •
- •
- • -

- -
- - / - - -

- -
- - / - - -

- -
- - / - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -
- - - -
- -

- -
- - - -

- -

- - -

-
- -

-
-
- - -

-
-
-
- -

-
- -
- - % -

-
-
-
- -

-
-
-
- - -

-
-
-
- 70% 且出现 >= 3 次的关键词自动加入下方列表', 'argon');?> -

-
- - - -

-
-
-
- 加微信, 联系QQ, 点击链接, 免费领取, 刷单, 兼职 -

- - '; - echo '

' . __('AI 学习到的关键字', 'argon') . '

'; - echo '
'; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - - // 按置信度排序 - uasort($learned_keywords, function($a, $b) { - return $b['confidence'] <=> $a['confidence']; - }); - - $current_keywords_array = array_filter(array_map('trim', explode("\n", get_option('argon_comment_spam_detection_keywords', '')))); - - foreach ($learned_keywords as $keyword => $stats) { - $confidence = round($stats['confidence'] * 100); - $color = $confidence >= 70 ? '#48bb78' : ($confidence >= 50 ? '#ed8936' : '#a0aec0'); - $is_added = in_array($keyword, $current_keywords_array); - - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - } - echo '
' . __('关键字', 'argon') . '' . __('垃圾', 'argon') . '' . __('正常', 'argon') . '' . __('置信度', 'argon') . '' . __('状态', 'argon') . '
' . esc_html($keyword) . '' . $stats['spam_count'] . '' . $stats['normal_count'] . '' . $confidence . '%'; - if ($is_added) { - echo '✓ ' . __('已添加', 'argon') . ''; - } elseif ($confidence >= 70 && $stats['spam_count'] >= 3) { - echo '⚠ ' . __('待添加', 'argon') . ''; - } else { - echo '○ ' . __('观察中', 'argon') . ''; - } - echo '
'; - echo '

'; - echo __('• 绿色:置信度 ≥ 70%,已自动添加到关键字列表', 'argon') . '
'; - echo __('• 橙色:置信度 50-70%,观察中', 'argon') . '
'; - echo __('• 灰色:置信度 < 50%,数据不足', 'argon'); - echo '

'; - echo ''; - } - ?> -
- -

-
-
- -

-
- - -

-
- -

-
- -

-
- -

- :
- :
- :
- : -

- -
- - - -

-
- - -
- -

-
-
- -

-
- -

- :
- :
- -

-
-
- - - -
-

- ():
- ():
- ( 500/天', 'argon');?>): -

- -
-
- - - -
- - -

-
- -

- -
- get_statistics(); - $error_handler = new Argon_Spam_API_Error_Handler(); - $api_status = $error_handler->get_status(); - ?> -
-

-

- : - - % - - ( ) -

-

- : - - % - - ( ) -

-
- - -
-

-
-
- : -

- -
- - -

-
- -

- - -
- get_errors(10); - if (empty($errors)): ?> -

- -
- -
-

- - - - -

-

- -

-
- -
- - - -

- -

- - -

- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -


gravatar.pho.ink/avatar/ , cdn.v2ex.com/gravatar/ , dn-qiniu-avatar.qbox.me/avatar/

- -
- - - -

- -
- - - -

- -
- - - - - -
- - - -
- -
- -
- - - -
- - true, - - ), 'objects'); - - foreach ($all_post_types as $post_type) { - - if ($post_type -> name == 'attachment'){ - - continue; - - } - - echo '
'. $post_type -> label .'
'; - - } - - ?> - -
- -
- -

- - -

-
- - -

- -
- -

-
- -

-
- -
- - -
-
- - -
-
- - -
-
- - -
-

-

- -
-
- - - -
- - $type_info): - $config = argon_get_email_template_config($type_key); - ?> -
-
- -
- -
- - -

-
- -
- - -

-
- -
- -
- $desc): ?> - - {{}} - - - - -
-

-
- -
- -
-
:
-
:
-
-
-
- -
- - -
-
- -
- - - - - -
- -

-
- -

-
- -

-
- -

-
- -

-
-

- -

- - - -

- -
- - - -


- -

分类
"; - - $categories = get_categories(array( - - 'hide_empty' => 0, - - 'hierarchical' => 0, - - 'taxonomy' => 'category' - - )); - - foreach($categories as $category) { - - echo "".$category -> name ." -> ". $category -> term_id .""; - - } - - echo "
Tag
"; - - $categories = get_categories(array( - - 'hide_empty' => 0, - - 'hierarchical' => 0, - - 'taxonomy' => 'post_tag' - - )); - - foreach($categories as $category) { - - echo "".$category -> name ." -> ". $category -> term_id .""; - - } - - echo ""; - - ?> - - - -

- -
- - - -

- -
- -

- -
- - 个人资料页面将 "管理界面配色方案" 设为 "Argon" 即可开启。', 'argon'), admin_url('profile.php'));?> - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - -

- -
- - - - - -

- - - - - - - -

- - - - - - - - - -
- - - - - -
- - - -
- - 0) { - $remaining = max(0, 3600 - (time() - $enabled_time)); - } - ?> - -
- -
- - - - - - - - ' . floor($remaining / 60) . ':' . str_pad($remaining % 60, 2, '0', STR_PAD_LEFT) . ''); ?> - - - - - - - - - -
- - - -
- -

- -
- - - -

- - - -
- - - - - -

- - - - - - - -
- - () - -
- - $error): ?> - -
- -
100 ? '...' : ''; ?>
- -
- - - -
- - - -
- - - -
- - - -
- - - - - -
- - - -

- -
- -

- - - - - - - -

- -
- -
- -
- - - -
- -
- -
- -
- - - - - - argon_normalize_social_url('twitter', isset($_POST['argon_email_social_twitter']) ? sanitize_text_field($_POST['argon_email_social_twitter']) : ''), - 'github' => argon_normalize_social_url('github', isset($_POST['argon_email_social_github']) ? sanitize_text_field($_POST['argon_email_social_github']) : ''), - 'weibo' => argon_normalize_social_url('weibo', isset($_POST['argon_email_social_weibo']) ? sanitize_text_field($_POST['argon_email_social_weibo']) : ''), - 'bilibili' => argon_normalize_social_url('bilibili', isset($_POST['argon_email_social_bilibili']) ? sanitize_text_field($_POST['argon_email_social_bilibili']) : '') - ); - update_option('argon_email_social_links', $social_links); - - // 保存邮件模板配置 - $email_types = array('comment_notify', 'spam_notify', 'reply_notify', 'todo_urge'); - foreach ($email_types as $type) { - // 保存启用状态 - argon_update_option_checkbox('argon_email_template_' . $type . '_enabled'); - // 保存主题 - argon_update_option('argon_email_template_' . $type . '_subject'); - // 保存内容(允许 HTML) - argon_update_option_allow_tags('argon_email_template_' . $type . '_content'); - } - - argon_update_option('argon_hide_footer_author'); - - argon_update_option('argon_card_radius'); - - argon_update_option('argon_comment_avatar_vcenter'); - - argon_update_option('argon_pjax_disabled'); - - argon_update_option('argon_comment_allow_markdown'); - - argon_update_option('argon_comment_allow_editing'); - - argon_update_option('argon_comment_allow_privatemode'); - - argon_update_option('argon_comment_allow_mailnotice'); - - argon_update_option_checkbox('argon_comment_mailnotice_checkbox_checked'); - - argon_update_option('argon_comment_pagination_type'); - - argon_update_option('argon_who_can_visit_comment_edit_history'); - - argon_update_option('argon_home_show_shuoshuo'); - - argon_update_option('argon_enable_search_filters'); - - argon_update_option('argon_search_filters_type'); - - argon_update_option('argon_darkmode_autoswitch'); - - argon_update_option('argon_enable_amoled_dark'); - - argon_update_option('argon_outdated_info_time_type'); - - argon_update_option('argon_outdated_info_days'); - - argon_update_option('argon_outdated_info_tip_type'); - - argon_update_option('argon_outdated_info_tip_content'); - - argon_update_option_checkbox('argon_show_toolbar_mask'); - - argon_update_option('argon_enable_banner_title_typing_effect'); - - argon_update_option('argon_banner_typing_effect_interval'); - - argon_update_option('argon_page_layout'); - - argon_update_option('argon_article_list_layout'); - - argon_update_option('argon_article_list_layout_mobile'); - - argon_update_option('argon_enable_pangu'); - - // Mermaid 图表配置 - argon_update_option_checkbox('argon_enable_mermaid'); - argon_update_option('argon_mermaid_cdn_source'); - argon_update_option('argon_mermaid_cdn_custom_url'); - argon_update_option('argon_mermaid_theme'); - argon_update_option_checkbox('argon_mermaid_use_local'); - argon_update_option_checkbox('argon_mermaid_debug_mode'); - - argon_update_option('argon_assets_path'); - - argon_update_option('argon_custom_assets_path'); - - argon_update_option('argon_comment_ua'); - - argon_update_option('argon_wp_path'); - - argon_update_option('argon_dateformat'); - - argon_update_option('argon_font'); - - argon_update_option('argon_card_shadow'); - - argon_update_option('argon_enable_code_highlight'); - - argon_update_option('argon_code_highlight_hide_linenumber'); - - argon_update_option('argon_code_highlight_transparent_linenumber'); - - argon_update_option('argon_code_highlight_break_line'); - - argon_update_option('argon_code_theme'); - - argon_update_option('argon_comment_enable_qq_avatar'); - - argon_update_option('argon_enable_login_css'); - - argon_update_option('argon_hide_categories'); - - argon_update_option('argon_article_meta'); - - argon_update_option('argon_fold_long_comments'); - - argon_update_option('argon_fold_long_shuoshuo'); - - argon_update_option('argon_first_image_as_thumbnail_by_default'); - - argon_update_option('argon_enable_headroom'); - - argon_update_option('argon_comment_emotion_keyboard'); - - argon_update_option_allow_tags('argon_additional_content_after_post'); - - argon_update_option('argon_related_post'); - - argon_update_option('argon_related_post_sort_orderby'); - - argon_update_option('argon_related_post_sort_order'); - - argon_update_option('argon_related_post_limit'); - - argon_update_option('argon_article_header_style'); - - argon_update_option('argon_text_gravatar'); - - argon_update_option('argon_disable_googlefont'); - - argon_update_option('argon_disable_codeblock_style'); - - argon_update_option('argon_reference_list_title'); - - argon_update_option('argon_trim_words_count'); - - argon_update_option('argon_enable_comment_upvote'); - - argon_update_option('argon_article_list_waterflow'); - - argon_update_option('argon_banner_size'); - - argon_update_option('argon_toolbar_blur'); - - argon_update_option('argon_toolbar_style'); - - argon_update_option('argon_toolbar_shadow'); - - argon_update_option('argon_toolbar_border'); - - argon_update_option('argon_toolbar_compact'); - - argon_update_option('argon_toolbar_center'); - - argon_update_option('argon_toolbar_links_left'); - - argon_update_option('argon_toolbar_links_right'); - - argon_update_option('argon_archives_timeline_show_month'); - - argon_update_option('argon_archives_timeline_url'); - - argon_update_option('argon_enable_immersion_color'); - - argon_update_option('argon_enable_comment_pinning'); - - argon_update_option('argon_show_comment_parent_info'); - - - - //LazyLoad 相关 - - argon_update_option('argon_enable_lazyload'); - - argon_update_option('argon_lazyload_effect'); - - argon_update_option('argon_lazyload_threshold'); - - argon_update_option('argon_lazyload_loading_style'); - - //图片缩放预览相关 - - argon_update_option('argon_enable_fancybox'); - - argon_update_option('argon_enable_zoomify'); - - argon_update_option('argon_zoomify_duration'); - - argon_update_option('argon_zoomify_easing'); - - argon_update_option('argon_zoomify_scale'); - - - - //数学公式相关配置项 - - argon_update_option('argon_math_render'); - - argon_update_option('argon_mathjax_cdn_url'); - - argon_update_option('argon_mathjax_v2_cdn_url'); - - argon_update_option('argon_katex_cdn_url'); - - argon_update_option_checkbox('argon_mathjax3_use_local'); - - argon_update_option_checkbox('argon_mathjax2_use_local'); - - argon_update_option_checkbox('argon_katex_use_local'); - - - - //页头页尾脚本 - - argon_update_option_allow_tags('argon_custom_html_head'); - - argon_update_option_allow_tags('argon_custom_html_foot'); - - - - //公告 - - argon_update_option_allow_tags('argon_sidebar_announcement'); - - //AI 摘要 - argon_update_option_checkbox('argon_ai_summary_enable'); - argon_update_option('argon_ai_summary_provider'); - argon_update_option('argon_ai_summary_prompt'); - argon_update_option('argon_ai_summary_exclude_ids'); - - // 保存所有提供商的多 API 配置 - $providers = ['openai', 'anthropic', 'deepseek', 'xiaomi', 'qianwen', 'wenxin', 'doubao', 'kimi', 'zhipu', 'siliconflow']; - foreach ($providers as $provider) { - // 保存 API 配置数组 - if (isset($_POST["argon_ai_{$provider}_apis"])) { - $apis_json = stripslashes($_POST["argon_ai_{$provider}_apis"]); - $apis = json_decode($apis_json, true); - if (is_array($apis)) { - update_option("argon_ai_{$provider}_apis", $apis); - } - } - - // 保存当前激活的 API ID - if (isset($_POST["argon_ai_{$provider}_active_api"])) { - update_option("argon_ai_{$provider}_active_api", sanitize_text_field($_POST["argon_ai_{$provider}_active_api"])); - } - } - - //AI 垃圾评论识别 - argon_update_option_checkbox('argon_comment_spam_detection_enable'); - argon_update_option('argon_comment_spam_detection_prompt_mode'); - argon_update_option('argon_comment_spam_detection_confidence_threshold'); - argon_update_option('argon_comment_spam_detection_privacy_level'); - argon_update_option('argon_comment_spam_detection_prompt'); - argon_update_option('argon_comment_spam_detection_mode'); - argon_update_option('argon_comment_spam_detection_sample_rate'); - argon_update_option('argon_comment_spam_detection_auto_action'); - argon_update_option('argon_comment_spam_detection_whitelist'); - argon_update_option_checkbox('argon_comment_spam_detection_exclude_logged_in'); - argon_update_option('argon_comment_spam_detection_keywords'); - argon_update_option_checkbox('argon_comment_spam_detection_ai_learn'); - - } - -} - -argon_update_themeoptions(); - -?> diff --git a/tmp/settings_225a925.php b/tmp/settings_225a925.php new file mode 100644 index 0000000000000000000000000000000000000000..0985b3b7e25541d9998ee9af13f59ca1def177df GIT binary patch literal 498714 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
  • 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