8
n8n 中文网amn8n.com

AI驱动的WordPress内容工作流

中级

这是一个Content Creation, Multimodal AI领域的自动化工作流,包含 12 个节点。主要使用 If, Code, Postgres, Wordpress, Agent 等节点。 使用OpenAI GPT自动化从PostgreSQL到WordPress的博客发布

前置要求
  • PostgreSQL 数据库连接信息
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "ai-wordpress-blog-automation",
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "name": "AI驱动的WordPress内容工作流",
  "tags": [],
  "nodes": [
    {
      "id": "291e2ca0-6eb2-4e69-a147-2369e7f27257",
      "name": "🗄️ PostgreSQL触发器",
      "type": "n8n-nodes-base.postgres",
      "position": [
        -672,
        80
      ],
      "parameters": {
        "query": "SELECT *\nFROM \"your_table_name\"\nWHERE \"Processed\" = FALSE OR \"Processed\" IS NULL\nORDER BY \"Created_At\" DESC\nLIMIT 1;",
        "options": {},
        "operation": "executeQuery"
      },
      "credentials": {
        "postgres": {
          "id": "YOUR_POSTGRES_CREDENTIALS_ID",
          "name": "PostgreSQL Database Connection"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "7fbc5898-0f88-46e8-96ce-e4e215122974",
      "name": "⏰ 计划触发器",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -896,
        80
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "057ddc57-2019-4cad-acdd-a3a69976512d",
      "name": "📝 格式化博客数据",
      "type": "n8n-nodes-base.code",
      "position": [
        128,
        80
      ],
      "parameters": {
        "jsCode": "// Parse the AI response safely\nconst input = $input.first().json;\n\n// Handle payload structure: sometimes response, sometimes output\nconst aiResponse = input.response || input.output || JSON.stringify(input);\n\n// Try to parse JSON from AI response\nlet blogData;\ntry {\n  const jsonMatch =\n    aiResponse.match(/```json\\s*([\\s\\S]*?)\\s*```/) ||\n    aiResponse.match(/{[\\s\\S]*}/);\n\n  if (jsonMatch) {\n    blogData = JSON.parse(jsonMatch[1] || jsonMatch[0]);\n  } else {\n    throw new Error(\"No JSON structure found\");\n  }\n} catch (error) {\n  const safeText = aiResponse || \"AI did not return text.\";\n  blogData = {\n    title: safeText.split(\"\\n\")[0] || \"Generated Blog Post\",\n    content: safeText,\n    excerpt: safeText.substring(0, 200) + \"...\",\n    meta_description: safeText.substring(0, 160),\n  };\n}\n\n// Ensure fallback values\nconst safeTitle = blogData.title || \"AI Generated Marketing Content\";\nconst safeContent = blogData.content || \"No content generated.\";\nconst safeExcerpt =\n  blogData.excerpt || safeContent.substring(0, 200) + \"...\";\nconst safeMeta =\n  blogData.meta_description || safeContent.substring(0, 160);\n\n// Get the original database record\nlet dbRecord = {};\ntry {\n  dbRecord = $('🗄️ PostgreSQL Trigger').item.json || {};\n} catch (e) {\n  dbRecord = { id: \"unknown\", source: \"no-db-record\" };\n}\n\n// Return structured data for WordPress\nreturn {\n  json: {\n    title: safeTitle,\n    content: safeContent,\n    excerpt: safeExcerpt,\n    status: \"publish\",\n    categories: [\"Marketing\"],\n    tags: [\"AI\", \"PostgreSQL\", \"WordPress\", \"Marketing\", \"Automation\"],\n    meta_description: safeMeta,\n    original_record_id: dbRecord.id || \"no-id\",\n    source_data: dbRecord,\n  },\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "a2eeca41-110d-4c61-856d-409e8ce0661f",
      "name": "✍️ WordPress发布器",
      "type": "n8n-nodes-base.wordpress",
      "position": [
        352,
        80
      ],
      "parameters": {
        "tags": {
          "tags": [
            "AI",
            "PostgreSQL",
            "WordPress",
            "Marketing",
            "Automation"
          ]
        },
        "title": "={{ $json.title }}",
        "status": "publish",
        "content": "={{ $json.content }}",
        "excerpt": "={{ $json.excerpt }}",
        "categories": {
          "categories": [
            "Marketing"
          ]
        },
        "additionalFields": {
          "meta": {
            "metaProperties": [
              {
                "key": "meta_description",
                "value": "={{ $json.meta_description }}"
              }
            ]
          }
        }
      },
      "credentials": {
        "wordpressApi": {
          "id": "YOUR_WORDPRESS_CREDENTIALS_ID",
          "name": "WordPress API Connection"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "946b27ee-37ea-4b82-867b-624f281727d3",
      "name": "💾 更新数据库",
      "type": "n8n-nodes-base.postgres",
      "position": [
        576,
        80
      ],
      "parameters": {
        "query": "UPDATE \"your_table_name\"\nSET \n    \"Processed\" = TRUE,\n    \"Wordpress_Post_Id\" = $1,\n    \"Wordpress_Post_Url\" = $2,\n    \"Blog_Title\" = $3,\n    \"Processed_At\" = NOW()\nWHERE \"id\" = $4;",
        "options": {},
        "operation": "executeQuery",
        "additionalFields": {
          "queryParameters": {
            "parameters": [
              {
                "value": "={{ $json.id }}"
              },
              {
                "value": "={{ $json.link }}"
              },
              {
                "value": "={{ $json.title.rendered }}"
              },
              {
                "value": "={{ $('📝 Format Blog Data').item.json.original_record_id }}"
              }
            ]
          }
        }
      },
      "credentials": {
        "postgres": {
          "id": "YOUR_POSTGRES_CREDENTIALS_ID",
          "name": "PostgreSQL Database Connection"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "3254f143-fe85-49c8-a454-bb9729fd77dc",
      "name": "OpenAI 聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -176,
        288
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "YOUR_OPENAI_CREDENTIALS_ID",
          "name": "OpenAI API Connection"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "dde2cc13-b8a2-4771-beb6-09e7fc31a352",
      "name": "🔍 检查记录是否存在",
      "type": "n8n-nodes-base.if",
      "position": [
        -448,
        80
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "condition_1",
              "operator": {
                "type": "number",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": 0
            },
            {
              "id": "c9785b0c-f86c-4293-a5b3-8825e74ad0c4",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.Blog_Title }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "cdacc933-4448-40b8-a9c5-242bf766d62a",
      "name": "🤖 生成博客文章",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -224,
        80
      ],
      "parameters": {
        "text": "=You are an expert marketing content writer. Create engaging, SEO-optimized blog posts that convert readers into customers.\n\nUser Message:\nCreate a comprehensive marketing blog post based on this title: \n{{ $json.Blog_Title }}\n\nThe blog post should include:\n1. A catchy, SEO-friendly title\n2. An engaging introduction that hooks the reader\n3. Well-structured body content with subheadings\n4. A compelling conclusion with a call-to-action\n5. Optimize for marketing and conversion\n\nFormat the response as JSON with these fields:\n- title: The blog post title\n- content: The full HTML content of the blog post\n- excerpt: A brief excerpt (150-200 characters)\n- meta_description: SEO meta description (150-160 characters)",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "d2941310-5f0a-43fa-a232-f68f0b990f78",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        -320
      ],
      "parameters": {
        "width": 432,
        "height": 720,
        "content": "## 1. 触发器与数据获取"
      },
      "typeVersion": 1
    },
    {
      "id": "539c0737-da51-4e7f-8127-fefd690f75d5",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        -320
      ],
      "parameters": {
        "color": 4,
        "width": 560,
        "height": 720,
        "content": "## 2. AI内容生成"
      },
      "typeVersion": 1
    },
    {
      "id": "252aa9dd-5b44-4ba2-8621-19895689f740",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        -320
      ],
      "parameters": {
        "color": 3,
        "width": 208,
        "height": 720,
        "content": "## 3. 数据格式化与安全"
      },
      "typeVersion": 1
    },
    {
      "id": "af0ac8f3-d7e9-4546-8b27-02c1d9629d23",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        304,
        -320
      ],
      "parameters": {
        "color": 5,
        "width": 432,
        "height": 720,
        "content": "## 4. 发布与数据库更新"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "00000000-0000-0000-0000-000000000000",
  "connections": {
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "🤖 Generates Blog Post",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "⏰ Schedule Trigger": {
      "main": [
        [
          {
            "node": "🗄️ PostgreSQL Trigger",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "💾 Update Database": {
      "main": [
        []
      ]
    },
    "📝 Format Blog Data": {
      "main": [
        [
          {
            "node": "✍️ WordPress Publisher",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "🔍 Check Record Exists": {
      "main": [
        [
          {
            "node": "🤖 Generates Blog Post",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "🤖 Generates Blog Post": {
      "main": [
        [
          {
            "node": "📝 Format Blog Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "✍️ WordPress Publisher": {
      "main": [
        [
          {
            "node": "💾 Update Database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "🗄️ PostgreSQL Trigger": {
      "main": [
        [
          {
            "node": "🔍 Check Record Exists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 内容创作, 多模态 AI

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量12
分类2
节点类型8
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Avkash Kakdiya

Avkash Kakdiya

@itechnotion

🚀 Founder of iTechNotion — we build custom AI-powered automation workflows for startups, agencies, and founders. 💡 Specializing in agentic AI systems, content automation, sales funnels, and digital workers. 🔧 14+ years in tech | Building scalable no-code/low-code solutions using n8n, OpenAI, and other API-first tools. 📬 Let’s automate what slows you down.

外部链接
在 n8n.io 查看

分享此工作流