1. 项目概述当AI智能体遇上WordPress内容管理如果你和我一样既是一个WordPress站点的管理员又是一个对AI自动化工具充满好奇的开发者那么你肯定遇到过这样的场景每天在内容创作、文章发布、图片上传、评论审核这些重复性工作上花费大量时间心里总琢磨着要是能让我的AI助手直接帮我打理网站就好了。今天要聊的这个项目gezipppp-ux/agent-workpress-skill就是为解决这个痛点而生的。它本质上是一座桥梁一头连着强大的AI智能体平台OpenClaw另一头连着全球最流行的内容管理系统WordPress。简单来说这个项目把你在WordPress后台那些点击、拖拽、输入的操作比如“发布一篇带图的文章”、“审核并回复一条评论”、“给文章添加一个新分类”都封装成了一个个标准的、可被AI理解和执行的“技能”。OpenClaw智能体可以像调用一个函数一样通过REST API直接操作你的WordPress站点。这不仅仅是简单的API调用它更是一种“运营思维”的封装将内容运营中那些琐碎但关键的步骤沉淀为可复用、可组合的自动化流程。这个项目适合谁呢首先是像我这样的个人站长或小型团队希望将内容发布的流程自动化把精力更多地集中在创意和策略上。其次是那些正在探索AI与现有工作流结合的开发者或技术运营它提供了一个非常清晰、安全的样板告诉你如何为AI设计专用的、可控的操作接口。最后它也适合任何希望将WordPress管理任务标准化的团队通过这套Skill可以确保所有操作都遵循统一的规则和审计轨迹。2. 核心架构与设计思路拆解2.1 为什么是“插件Skill”的双层架构这个项目最核心的设计思想是清晰地划分了“能力提供方”和“能力调用方”的边界。这不是一个简单的WordPress API客户端而是一个完整的、面向AI智能体交互的解决方案。第一层WordPress插件能力提供方这个插件agent-wordpress.php的角色是为你的WordPress站点披上一件AI友好的“外衣”。它没有去修改WordPress核心也没有替换默认的REST API而是额外注册了一套全新的、专为智能体设计的API端点/wp-json/agent-wordpress/v1/。这么做有几个关键考量安全性隔离专用的API路径意味着你可以独立管理其权限、限流和日志不会干扰到站点前台或其他应用如手机App使用的默认API。功能定制化智能体的操作逻辑和人类用户不同。例如上传图片时可能需要同时支持本地路径、远程URL和Base64编码创建文章时可能需要更结构化的参数校验。专用API可以针对这些场景做深度优化。权限聚焦插件内部绑定了一个特定的WordPress用户需要在后台配置所有通过此API发起的操作都以此用户身份执行。这实现了权限的收口AI能做什么、不能做什么完全由这个后台配置的用户角色决定清晰可控。第二层OpenClaw Skill能力调用方与封装层Skill目录下的内容是给OpenClaw智能体“看”的说明书和工具包。它包含三部分SKILL.md定义了技能的元信息比如这个技能叫什么、能解决什么问题、在什么情况下会被OpenClaw触发。这相当于告诉AI“嘿我有个技能叫‘WordPress内容管理’当你需要发文章或者管评论的时候可以找我。”FORMS.md这是参数的“字典”或“表单”。它详细定义了每个操作需要哪些参数如title,content,image_url参数的类型是什么字符串、数字、枚举以及是否必填。这确保了AI在调用时能提供格式正确的数据。scripts/这里是具体的执行脚本Node.js编写。当OpenClaw决定调用某个技能时最终会执行这里的某个脚本。脚本负责将AI传递过来的参数转换成对WordPress插件API的具体HTTP请求。这种双层架构的优势在于解耦和灵活性。WordPress插件可以独立升级和维护只要API契约不变上层的Skill脚本就无需改动。同样Skill脚本的逻辑也可以根据OpenClaw的升级或新的运营流程进行优化而不影响底层WordPress站点的稳定性。2.2 复合流程设计从单点操作到场景化自动化项目除了提供文章增删改查CRUD等原子操作更亮眼的是提供了“复合技能流程”。这是将运营经验代码化的体现。以skills.js中的publish-post-with-image流程为例它不是一个简单的“发布文章”接口。一个标准的带图发文流程人类操作是1. 上传图片 - 2. 获取图片ID - 3. 编辑文章设置特色图片 - 4. 发布文章。如果让AI直接调用原子API它需要自己编排这个顺序并处理中间状态如图片ID的传递。而这个复合技能将这一系列操作打包成了一个“事务”。脚本内部会先调用媒体上传接口将网络图片或本地图片上传至WordPress媒体库。从上传成功的响应中提取出媒体图片的ID。使用这个媒体ID作为“特色图片”参数连同标题、正文一起调用创建文章接口。根据参数决定文章状态草稿或直接发布。对于调用方OpenClaw或运营人员来说只需要提供图片地址、标题和内容剩下的繁琐步骤全部由这个复合技能自动完成。这极大地降低了AI执行复杂任务的心智负担和出错概率真正实现了“一句话需求自动化执行”的场景。3. 环境准备与详细安装指南3.1 WordPress插件安装不止是上传那么简单根据项目文档插件安装似乎就是复制文件。但根据我多年的WordPress运维经验这里有几个细节必须注意否则后面调用API会处处碰壁。第一步环境检查与准备插件要求WordPress 5.0和PHP 7.2这几乎是现代主机的标配。但我强烈建议你检查两件事PHP扩展确保curl和json扩展已启用。插件API的SDK或脚本在通信时依赖这些。固定链接登录WordPress后台进入“设置 固定链接”确保不是“朴素”模式即带?p123的那种。REST API依赖美观的URL重写通常选择“文章名”或“数字型”都能正常工作。第二步插件文件部署的“正确姿势”文档提到了两种方式通过后台上传ZIP包或直接复制文件。对于生产环境我推荐后者因为更透明也便于版本控制如使用Git。通过FTP或服务器文件管理器进入你的WordPress安装目录下的wp-content/plugins/。新建一个文件夹命名为agent-wordpress注意插件主文件也叫这个名字所以文件夹名必须一致否则WordPress无法识别。将项目upload/目录下的所有内容包括agent-wordpress.php和includes/文件夹复制到这个新建的agent-wordpress文件夹内。最终的路径应该像这样/wp-content/plugins/agent-wordpress/agent-wordpress.php。重要提示千万不要只复制upload/目录本身或者把文件散落在插件根目录。WordPress通过扫描每个插件文件夹内的主PHP文件来识别插件结构错误会导致插件“消失”在后台列表中。第三步后台配置与安全加固启用插件后在WordPress后台左侧菜单栏通常在最下方会找到“Agent WordPress”的设置项。这里有两个关键配置操作用户ID输入一个已存在的WordPress用户ID。我强烈建议你专门创建一个新用户角色至少为“作者”Author如果你想让它管理评论则需要“编辑”Editor角色。永远不要使用管理员Administrator账号这是最小权限原则。固定授权码这是一个共享密钥。请使用密码生成器生成一个高强度、随机的字符串如xQ9!kLm2zP5#。记下来后续所有API调用都依赖它。配置完成后建议你立即进行一次权限验证测试。打开浏览器的无痕窗口访问https://你的域名/wp-json/agent-wordpress/v1/auth/exchange。如果返回的是“未提供授权码”或类似的错误而不是“404未找到”说明插件API已经成功注册并运行了。3.2 OpenClaw Skill部署与参数准备Skill的部署相对直接核心是把定义文件SKILL.md, FORMS.md和脚本放到OpenClaw能扫描到的目录。但关键在于理解这些脚本的运行环境。环境准备Node.js版本管理项目文档指出脚本需要Node.js 18而SDK部分需要20。为了避免兼容性问题我建议统一使用Node.js 20或更高的LTS版本。如果你在服务器或本地开发机上管理多个Node项目使用nvmNode Version Manager是最佳实践。# 安装并切换到Node.js 20 nvm install 20 nvm use 20Skill目录结构解析将skills/agent-workpress-skill/整个目录复制到你的OpenClaw技能目录下。复制后其内部结构应保持原样your-openclaw-skills-dir/ └── agent-workpress-skill/ ├── SKILL.md # 技能元数据告诉OpenClaw“我是什么” ├── FORMS.md # 参数定义告诉OpenClaw“调用我需要什么” ├── scripts/ # 所有可执行的Node.js脚本 │ ├── posts.js │ ├── media.js │ ├── skills.js │ └── ... └── examples/ # 调用示例OpenClaw会在启动或热加载时读取SKILL.md和FORMS.md将这些技能注册到其内部技能库中。参数配置安全地管理凭证所有脚本都需要--base-url和认证信息--token或--auth-code。在命令行中直接传递这些敏感信息是不安全的也容易出错。我的做法是使用环境变量。创建一个名为.env.wordpress的配置文件不要提交到GitWORDPRESS_BASE_URLhttps://your-site.com WORDPRESS_AUTH_CODE你的高强度授权码 # 或者如果你已经换取了token WORDPRESS_ACCESS_TOKENeyJhbGciOiJIUzI1NiIs...在调用脚本前先加载环境变量# 在Linux/Mac上 export $(cat .env.wordpress | xargs) # 然后调用脚本 node scripts/posts.js list --base-url $WORDPRESS_BASE_URL --token $WORDPRESS_ACCESS_TOKEN更进一步你可以修改脚本让其优先从环境变量读取这些参数这样命令就更简洁了。例如在脚本开头加入const baseUrl process.env.WORDPRESS_BASE_URL || args[base-url]; const token process.env.WORDPRESS_ACCESS_TOKEN || args.token; if (!baseUrl || !token) { console.error(错误必须提供 base-url 和 token可通过参数或环境变量设置); process.exit(1); }4. 核心功能实操与脚本深度解析4.1 认证流程从授权码到访问令牌一切操作始于认证。插件设计了一个简单的OAuth 2.0简化模式流程用固定的“授权码”交换一个有时效性的“访问令牌”。原理与实操交换令牌这是第一步。使用配置好的auth_code向插件发起请求。curl -X POST https://your-site.com/wp-json/agent-wordpress/v1/auth/exchange \ -H Content-Type: application/json \ -d {auth_code:YOUR_SUPER_STRONG_AUTH_CODE_HERE}如果成功你会得到一个JSON响应其中包含access_token和expires_in有效期通常为24小时。使用令牌获取到的access_token就是后续所有API调用的“钥匙”。需要在每个请求的HTTP头中携带Authorization: Bearer 你的access_token项目中的Node.js脚本已经帮你处理了这个细节你只需要在调用时传入--token参数即可。令牌刷新文档没有明确说明刷新机制。通常有两种设计一是旧令牌过期后重新用授权码交换二是API同时提供一个刷新令牌的接口。根据常见实践这个插件很可能采用第一种简单方式。因此在你的自动化流程中需要加入令牌过期的判断和重新获取的逻辑。避坑指南授权码保密auth_code是终极密钥一旦泄露他人可以获取令牌并操作你的网站。务必像保管数据库密码一样保管它只在服务器环境变量或安全的配置中心存储。HTTPS是必须的在生产环境你的WordPress站点必须启用HTTPS。否则授权码和令牌在网络上以明文传输极易被截获。验证用户拿到令牌后第一件事应该是调用/users/me接口确认当前API操作对应的WordPress用户身份是否符合预期。4.2 文章管理不仅仅是CRUD文章管理是内容运营的核心。脚本posts.js提供了完整的生命周期管理。创建文章create的细节node scripts/posts.js create \ --base-url https://your-site.com \ --token $TOKEN \ --title 我的AI生成文章 \ --content 这是由OpenClaw自动发布的文章内容... \ --excerpt 文章摘要 \ --status draft \ --categories 技术,AI \ --tags 自动化,WordPress这里有几个关键参数的处理逻辑--status: 可以是draft草稿、publish发布、pending待审核等。对于自动化流程我强烈建议先设置为draft让人工做最终审核后再发布避免AI生成不合规内容直接上线。--categories和--tags: 接收逗号分隔的字符串。脚本内部会先检查分类/标签是否存在如果不存在插件API是否会自动创建根据常见的REST API设计它很可能要求分类/标签必须已存在。这意味着你需要先调用分类/标签管理接口确保它们存在或者使用复合技能来处理这个先决条件。--content: 文章内容支持完整的HTML格式。这意味着你可以让AI生成带格式加粗、列表、链接的内容直接传入即可。更新与状态流转更新文章使用update子命令需要提供文章ID。一个常见的自动化场景是“定时发布”AI先创建一篇状态为future定时的文章并设置--publish-date参数为未来的某个时间点。WordPress到时会自动发布。实操心得处理特色图片文章的特色图片Featured Image是通过featured_media参数设置的它需要一个媒体ID。这就是为什么skills.js中的复合技能publish-post-with-image如此重要。它封装了“先上传图片获取其ID再创建文章”这个原子操作组合。如果你需要从媒体库选择已有图片则需要先调用media.js list查询到图片ID。4.3 媒体上传三种方式的取舍media.js的upload功能支持三种图片来源这是插件针对AI场景做的贴心设计。本地路径--file-path适用于运行脚本的服务器或本地机器上的图片。脚本会读取文件并转换为multipart/form-data格式上传。注意如果OpenClaw和WordPress不在同一台机器此方式不可用。远程URL--image-url最常用的方式。AI在互联网上找到一张合适的图片直接提供其URL。插件后端会代表服务器去下载该图片并存入媒体库。风险点需要确保你的WordPress服务器能够访问该外网URL无防火墙阻挡并且要小心版权问题。Base64编码--image-base64当AI直接生成了一张图片例如通过DALL-E、Stable Diffusion等文生图模型时图片在内存中没有URL也没有本地文件。此时将其转换为Base64字符串直接上传是最佳路径。注意事项Base64字符串会显著增大请求体积对于大图片要确保你的Web服务器如Nginx和PHP配置允许接收足够大的请求体。示例上传远程图片并获取信息node scripts/media.js upload \ --base-url https://your-site.com \ --token $TOKEN \ --image-url https://example.com/path/to/image.jpg \ --title 封面图 \ --alt-text 描述图片内容的替代文本上传成功后响应体里会包含新图片的id、source_urlWordPress内的URL等关键信息。务必在脚本中捕获这个id用于后续的文章创建。4.4 评论管理实现自动化审核与互动评论管理脚本comments.js可以实现基础的CRUD但其价值在于与AI结合实现智能审核。场景自动化评论审核流水线列表与过滤使用comments.js list获取状态为hold待审核的评论。可以结合--post参数只查看某篇文章的评论。AI分析将评论内容、作者信息传递给OpenClaw或另一个AI模型进行分析判断是否为垃圾评论、是否包含不当言论或者是否是一个可以标准回复的常见问题。执行动作如果是垃圾评论调用comments.js delete删除。如果是正常评论调用comments.js update将其状态改为approved批准。如果需要回复在批准的同时可以调用comments.js create以管理员身份发布一条回复。skills.js中的moderate-comment-and-reply就封装了“批准并回复”的流程。注意事项权限执行评论审核将状态从hold改为approved需要当前配置的操作用户具备edit_posts或更高级别的权限即编辑或管理员。频率限制频繁调用评论列表接口可能对数据库造成压力。可以考虑在WordPress插件端或利用WordPress的Hook在新评论提交时直接触发一个Webhook通知你的AI服务实现事件驱动式的实时审核。4.5 分类与标签管理内容组织的自动化分类和标签管理是内容结构化的重要一环。terms.js脚本提供了相关功能。核心逻辑先查询再创建在自动化发布文章前通常需要确保分类和标签存在。一个稳健的流程是# 1. 列出所有分类检查“AI”分类是否存在 node scripts/terms.js list categories --base-url $BASE_URL --token $TOKEN # 2. 如果不存在则创建它。假设返回的列表中没有“AI” node scripts/terms.js create category --base-url $BASE_URL --token $TOKEN --name AI --slug ai创建分类时可以指定slugURL别名、description描述和parent父分类ID用于创建子分类。避坑指南名称冲突WordPress不允许存在同名的分类或标签在同一层级下。如果你的自动化脚本尝试创建一个已存在的分类API通常会返回错误。因此在创建前进行查询是一个好习惯。或者你可以编写更健壮的脚本实现“不存在则创建”的逻辑。5. 复合技能实战构建端到端自动化流程项目自带的skills.js提供了几个经典的复合流程模板。理解它们你就能举一反三构建自己的自动化流程。5.1 剖析publish-post-with-image流程这个脚本是理解复合技能的最佳范例。我们拆解一下它的内部逻辑参数接收与验证脚本接收--image-url--title,--content,--status等参数。顺序执行步骤A上传图片它首先调用media.js upload的功能可能是内部函数或子进程调用将image-url指定的图片上传到WordPress。步骤B提取媒体ID从上传成功的响应中解析出id字段。步骤C创建文章调用posts.js create的功能将title,content,status以及步骤B得到的id作为featured_media参数一起发送。错误处理如果步骤A失败如图片URL无效整个流程会中止不会执行步骤C。脚本应该提供清晰的错误信息。结果返回最终将创建成功的文章信息包含ID、链接等返回给调用者OpenClaw。你可以如何扩展多图上传修改脚本使其支持一个--image-urls数组参数循环上传多张图片并将它们全部添加到文章的“图库”gallery中这需要操作文章内容的HTML块或使用古腾堡区块的特定格式。自动提取摘要在创建文章前调用一个AI文本摘要服务对--content进行摘要然后将结果自动填入--excerpt参数。智能分类根据文章标题和内容让AI判断应该归属到哪个已有分类或者创建一个新的分类。5.2 设计你自己的复合技能以“周报自动生成与发布”为例假设你每周都要从多个数据源汇总信息生成一篇周报文章。我们可以设计一个名为publish-weekly-report的复合技能。技能输入参数--data-source数据源标识如“销售数据”、“用户反馈”。--week周数如“2023-W45”。--template报告模板。技能内部逻辑数据获取根据>问题现象可能原因排查步骤与解决方案WordPress后台找不到插件插件文件放置路径错误或结构不对。1. 确认插件目录为wp-content/plugins/agent-wordpress/。2. 确认主文件agent-wordpress.php直接位于上述目录内。3. 检查文件权限确保Web服务器如www-data用户有读取权限。调用/auth/exchangeAPI 返回404REST API未正确启用或插件未激活。1. 访问https://your-site.com/wp-json/确认WordPress默认REST API是工作的。2. 访问https://your-site.com/wp-json/agent-wordpress/v1/如果也是404说明插件路由未注册检查插件是否已激活。3. 检查WordPress的固定链接设置确保不是“朴素”模式。授权码交换令牌失败返回403授权码错误或插件配置未保存。1. 登录WordPress后台检查“Agent WordPress”设置中的授权码是否与调用时使用的一致。2. 确保输入无误注意大小写和特殊字符。3. 修改配置后点击“保存更改”。使用令牌调用其他API返回“无效令牌”或“权限不足”令牌已过期操作用户权限不足。1. 重新执行交换令牌流程获取新令牌。2. 调用/users/me接口确认返回的用户角色。确保该角色有执行目标操作如发布文章、管理评论的权限。在WordPress后台提升相应用户的角色。上传图片时提示“HTTP错误”或超时远程图片URL无法访问服务器PHP配置限制。1. 从你的WordPress服务器上使用curl或wget测试是否能下载目标图片。2. 检查PHP配置allow_url_fopen是否为On或者cURL扩展是否已安装。3. 如果图片很大检查PHP的upload_max_filesize和post_max_size设置。6.2 脚本运行与调试技巧开启详细日志 所有脚本都支持--verbose参数。在遇到问题时首先加上这个参数运行它会打印出详细的HTTP请求和响应信息是定位问题的第一利器。node scripts/posts.js list --base-url $URL --token $TOKEN --verbose手动测试API 在调试复杂脚本逻辑前先用curl或 Postman 手动测试插件API排除脚本本身的问题。例如测试创建文章curl -X POST https://your-site.com/wp-json/agent-wordpress/v1/posts \ -H Authorization: Bearer YOUR_TOKEN \ -H Content-Type: application/json \ -d {title:测试, content:内容, status:draft} \ -v # -v 参数输出详细过程处理JSON响应 脚本的输出通常是JSON。在Linux/Mac下可以使用jq工具来美化解析输出便于查看。node scripts/posts.js list --base-url $URL --token $TOKEN | jq .6.3 安全与性能优化建议API访问限流插件目前可能没有内置限流。如果你的站点暴露在公网建议在WordPress层面使用安全插件如Wordfence或在Web服务器Nginx/Apache层面对/wp-json/agent-wordpress/v1/路径的访问进行频率限制防止恶意刷API。令牌生命周期管理实现一个简单的令牌管理模块。在获取令牌时记录时间戳在每次调用API前检查令牌是否即将过期例如有效期剩余不足1小时如果是则自动重新交换新令牌。避免在业务高峰期因令牌突然过期导致流程中断。操作审计日志插件API的所有操作都应被记录。你可以通过WordPress的wp_insert_post、add_attachment等Action Hook将操作详情操作时间、用户、动作、对象ID记录到自定义日志文件或数据库中便于事后审计和问题追溯。错误重试机制在网络调用脚本如skills.js中对于非致命的瞬时错误如网络超时应加入指数退避的重试逻辑提高流程的鲁棒性。资源清理对于自动化创建的测试文章、媒体文件等可以编写一个定时清理脚本例如清理状态为draft且创建时间超过7天的文章防止产生大量无用数据。这个项目为WordPress的AI自动化运营打开了一扇大门。从我实际的集成经验来看最大的价值不在于替代人工而在于将人从重复、规范的劳动中解放出来让人工智能成为内容运营中一个高效、可靠的执行伙伴。开始使用时建议从简单的、非核心的任务如定时发布草稿、上传整理图片入手逐步建立对流程和稳定性的信心再扩展到更复杂的自动化场景。