Dify+WordPress,搭建自动发博客文章的工作流

很多粉丝问我:“怎么让 AI 写完文章直接发到 WordPress?”

今天我就把压箱底的配置流程整理成这份攻略,看完保证你能跑通!

Dify工作流运行结果截图,展示自动化写文章发文章的全流程执行效果

视频教程

一. 获取Wordpress的发帖权限

先登录到Wordpress后台,到用户——个人资料的最下面有个应用程序密码,输入名称创建一个,记得把它拷贝下来。

WordPress后台应用程序密码创建界面截图,显示如何生成REST API发帖权限

然后将你的管理员用户名(不一定是邮箱)和上面的程序密码,以下面的格式输入浏览器——检查——控制台。

// 将你的字符串放入 btoa 函数中
console.log(btoa("work@baixiaojunwm.com:WBa1s01KjrZfmY5R21gYVp0H"));
WordPress REST API Base64认证代码示例,用于Dify HTTP请求节点配置

回车之后会有一串码,就像截图中的:

d29ya0BiYWl4aWFvanVud20uY29tOldCYTFzMDFLanJaZm1ZNVIyMWdZVnAwSA==

先把它拷贝下来,等会要用。

二. 工作流

2.1 用户输入

我这里放入了三个字段:

  • topic: string类型,可以输入文章主题和一些相关资料。
  • slug_input:string类型,我用来放入关键词,并生成对应博客的链接后缀。
  • image:array[file],用来上传插入文章中的图片,同时也可以参考图片的内容写文章。
Dify工作流开始节点用户输入参数说明截图,涵盖slug和image参数配置

2.2 迭代

迭代主要是为了把前面image:array[file]上传的图片一张张上传到网站的服务器,并且获取图片链接,在后面写文章时可以插入到文章当中。

  • 输入:就是前面开始节点用户输入的文件列表。
  • 输出:就是迭代中的http请求节点处理的内容。
Dify HTTP请求节点配置截图,展示如何上传图片到WordPress服务器

我在迭代中放入了一个http请求节点,这就是在迭代中真正干活的。

  • API:选择post,后面的链接是https://你的域名/wp-json/wp/v2/media
  • HEADERS:(填入三组,照着填写就可以)
    • Authorization,Basic d29ya0BiYWl4aWFvanVud20uY29tOlR4ZVdJOWRuYXk2Q1lBVmJ3d0hHaGpGdA==
      (后面那一串就是我们在控制台获取的,你粘贴一下就行)
    • Content-Type,application/octet-stream
    • Content-Disposition,attachment; filename=”{{#迭代.item.(x)name}}” (引号中名称一定要输入/,然后选择。
  • BODY:选择binary,下面的变量选择迭代里的itemFile。
Dify迭代节点Body binary类型配置截图,用于逐张上传图片到WordPress

到这里我们就可以获得前面上传图片的链接了。

2.3 LLM节点

这一步就是给我们写文章的大脑。

  • 模型:你想要哪家的模型给你工作。(我这里选的是Kimi 2.5,思考比较全面,写的文章我比较喜欢,就是有点慢)
  • SYSTEM:提示词,我的放到了下面,大家也可以参考。所有蓝色部分必须要输入/,然后选择。
  • 视觉:我也开启了,我希望他也可以识别图片上的信息,作为写文章的参考。
  • 结构化输出:因为要输出object的格式,所以这里要开启。然后配置三个字段title,content,之后可以填入word press文章的对应部分。
Dify LLM节点结构化输出配置截图,设置title和content字段生成文章
# Role
你是一位拥有10年经验的英文专业SEO内容编辑和文案专家。你擅长撰写既能满足谷歌搜索算法(E-E-A-T原则),又能深度吸引用户点击并产生购买转化的文章。

# Task
根据提供的主要内容{{#1772512285852.topic#}}和关键信息{{#1772512285852.slug_input#}}以及图片上的信息,撰写一篇高质量、结构化、以用户为中心的英文文章。

# SEO & Writing Guidelines
1. **内容深度**:不要只做简单堆砌。请从用户痛点出发,通过解决问题的方式引入产品。内容需具备权威性、专业性和实用性。
2. **文章结构**:
   - 标题(Title):必须包含核心关键词,且具备强吸引力(Click-worthy)。
   - 内容(Content):合理使用 H2、H3 标签,逻辑清晰,覆盖用户搜索的相关长尾词。段落简短(建议不超过4行),多用列表(Bullet points)增加易读性。自然地将产品关键词/型号融入正文中,避免关键词堆砌。必须将上述所有图片列表中的 URL{{#1772515420627.output#}},按逻辑插入到最相关的段落下方。必须使用 `<img src="图片链接" alt="简洁准确的图片描述">`。

# Output Format
必须输出严格合法的 JSON 格式:{"title": "...", "content": "..."}。如果文章内容(content)中包含双引号 ("),请务必使用反斜杠进行转义(例如写成 \”),确保输出的 JSON 可以被 json.loads() 直接解析。”

到这里,文章就可以写好了。

2.4 LLM 2和参数提取器

这一步主要是把前面用户输入的关键词更改成英文作为文章链接的后缀。

Dify LLM2节点和参数提取器配置截图,用于生成英文slug和提取文章参数

以下会员专属内容

订阅即可获得全站会员文章阅读权限、会员专属内容、以及所有配套资料下载权限。

2.5 代码执行

这一步把前面的信息都整合起来。

  • 输入变量:
    • clean_slug:把前面关键词英文调取过来作为连接后缀。
    • llm_text:卡面LLM写的文章。
    • PYTHON3:将上面两个变量以新的格式赋值排列。我用的放到了下面,大家可以做参考,当然最简单的办法就是告诉Gemini或其他大模型你的需求,让它给你写一段。
    • 输出变量:也就是输出的内容和格式,result,类型Object。
JSON格式化的Dify变量赋值排列示例截图,展示参数映射规则
import json
import re

def main(llm_text: str, clean_slug: str) -> dict:
    try:
        # 核心逻辑:用正则把 ```json { ... } ``` 里的内容提取出来
        # re.DOTALL 允许 . 匹配换行符,确保多行 JSON 也能被匹配到
        match = re.search(r"```json\s*(\{.*?\})\s*```", llm_text, re.DOTALL)
        
        if match:
            # 成功抓到 JSON 字符串
            data = json.loads(match.group(1))
        else:
            # 如果没匹配到代码块,尝试直接加载全文(兜底方案)
            data = json.loads(llm_text)
            
        return {
            "result": {
                "title": data.get("title", ""),
                "content": data.get("content", ""),
                "slug": (clean_slug or "").strip().lower().replace(" ", "-"),
                "status": "publish"
            }
        }
    except Exception as e:
        # 异常处理,如果真的没拿到数据,返回报错信息
        return {
            "result": {
                "title": "Error",
                "content": f"Failed to parse LLM output: {str(e)}",
                "slug": "error",
                "status": "draft"
            }
        }

2.6 HTTP请求

这个http请求节点和前面上传图片获取链接不一样,这里是用来将前面的内容放入我们网站的。

  • API:选择POST,里面的链接https://你的域名/wp-json/wp/v2/posts
  • HEADERS:
    • Content-Type,application/json
    • Authorization,和前面的那个https请求节点一样。Basic d29ya0BiYWl4aWFvanVud20uY29tOlR4ZVdJOWRuYXk2Q1lBVmJ3d0hHaGpGdA==
  • BODY:raw。下面内容就是前面代码执行的输出result。
Dify最终HTTP发帖请求BODY配置截图,包含认证信息和JSON内容

2.7 结束节点

作为整个流程的结束,设置一下输出变量就可以了。

三. 总结及工作流文件

到里基本上一个自动写文章发文章的工作流就OK了。主要还是在设置参数的时候要细心一点,因为一点错误就可能导致运行不下去,我把工作流的文件下载链接放到下面,有需要的粉丝可以自行下载使用试试。

订阅评论
提醒
guest
2 评论
最新
最旧 最多投票
ctzpj
ctzpj
26 天 前

你好,请重视你站点AI聊天工具的BUG问题!我通过微信添加你,你并没回复,我没别的意思,只是想告诉你,你的聊天工具并不安全。

现代响应式侧边栏
快捷菜单