插件简介
CategoryBatchManager 是一款 Typecho 后台文章分类批量管理插件,主要功能:
在 文章管理列表 中提供批量操作:
- “移动到分类…”:将选中文章的分类替换为所选分类;
- “添加分类…”:在原有分类基础上追加新分类;
- “移除分类…”:从文章已有分类中移除某些分类。
在文章列表每一行的 “分类”列 尾部增加一个小的 “分类” 链接:
- 点击可快速为单篇文章调整分类。
整体操作基于 AJAX 完成,避免整页刷新,提升后台管理效率。
环境要求
- Typecho:版本 1.2.1
- PHP:版本 7.0.0 及以上(兼容 PHP 8.0)
插件在激活时会自动检查当前环境版本,如果版本过低,会在后台插件页给出明确错误提示,防止在不兼容环境中运行。
安装步骤
将插件代码放入 Typecho 的插件目录:
路径结构如下:
usr/ plugins/ CategoryBatchManager/ Plugin.php Action.php
登录 Typecho 后台 → 控制台 → 插件,找到:
- 插件名称:CategoryBatchManager(文章分类批量管理)
点击 “启动” 插件:
如果 PHP / Typecho 版本不满足要求,会直接提示:
CategoryBatchManager 需要 PHP 7.0 或更高版本CategoryBatchManager 需要 Typecho 1.2.1
- 符合要求则启动成功。
功能使用说明
1. 批量分类操作
- 打开后台:控制台 → 文章 → 所有文章。
在列表顶部/底部的 “选中项” 下拉菜单中,你会看到新增的 3 个选项:
- “移动到分类…”
- “添加分类…”
- “移除分类…”
使用步骤:
- 勾选需要操作的多篇文章(左侧复选框)。
- 点击其中一个批量分类操作(例如“移动到分类…”)。
页面会弹出一个分类选择弹窗,特点:
- 列出所有分类,按照层级缩进展示,支持子分类;
- 顶部带有 搜索框,输入可筛选分类;
- 支持多选分类(按住 Ctrl/多次勾选)。
选择好目标分类后点击 “确定”:
- 插件会通过 AJAX 请求
/action/category-batch; - 后台更新
table.relationships中cid-mid的分类关系; - 前端会直接更新列表中对应文章的“分类”列,无需刷新整页。
- 插件会通过 AJAX 请求
三种操作的具体逻辑:
移动到分类(move)
- 对选中文章:先删除该文章所有“分类”关联(仅限 metas.type = 'category' 的关系),再写入你新选择的分类。
- 适用于“文章从 A 版块整体迁移到 B 版块”。
例如:将此三篇文章从实践教程移动到性能测试
添加分类(add)
- 在当前已有分类基础上追加你新选择的分类;
- 已存在的关系不会重复添加。
- 适用于“批量为一批文章增加一个额外分类”。
例如:为飞牛nas分类下的三篇文章添加环境配置分类
移除分类(remove)
- 仅删除你选中的那些分类与文章的关系;
- 未勾选的其它分类不受影响。
- 适用于“批量清理某个分类下的文章归属”。
例如:移除上面加的环境配置分类
2. 单篇文章快速分类修改
在 文章列表的“分类”列 中,每一行分类的后面会有一个小的 灰色“分类” 链接(字体较小):
点击这一行的小“分类”链接:
- 插件会自动读取当前这一篇文章所属的分类(解析该单元格内原有的分类链接 URL 中的
category=mid参数)。 - 弹出与批量操作相同的分类选择弹窗。
- 弹窗内会 预先勾选该文章当前的分类。
- 插件会自动读取当前这一篇文章所属的分类(解析该单元格内原有的分类链接 URL 中的
在弹窗中重新勾选你想要的分类,然后点击 “确定”:
- 对该篇文章执行 “移动到分类” 操作,即覆盖原分类关系(可单选可多选)。
- 列表中的这一行“分类”列会立即更新。
这个功能特别适合对少数文章进行微调,而不必进入 write-post.php 编辑页面。
权限与安全
所有批量操作都基于 Typecho 的后台权限体系:
- 仅当用户已登录并且具备 编辑及以上权限(
$user->pass('editor', true))时,才允许调用批量分类接口。
- 仅当用户已登录并且具备 编辑及以上权限(
后端接口路径:
POST /action/category-batch参数:
do=batchop=move|add|removecid[]:文章 ID 列表mid[]:分类 ID 列表
- 插件只会操作
metas.type = 'category'的关系,不会影响标签等其它 metas。
常见问题
看不到新增的批量菜单项?
- 确认已启动 CategoryBatchManager 插件;
- 确认当前页面是
manage-posts.php(文章管理列表),插件只在这个页面注入 JS/HTML; - 清理浏览器缓存后再试。
分类弹窗里没有任何分类?
- 检查后台是否已经创建了分类;
- 插件通过
\Widget\Metas\Category\Rows获取分类数据,与编辑文章页面的分类列表是同一来源。
操作后分类没变?
- 看浏览器控制台是否有 AJAX 请求报错;
- 检查当前登录用户是否拥有
editor以上权限。
下载地址
此处内容需要评论回复后(审核通过)方可阅读。












