WordPress REST API + AI自动发布博客文章:完整工作流搭建教程(2026最新)

每天写博客最烦的是什么?发布流程

写完文章 → 登录后台 → 粘贴内容 → 设置分类 → 上传封面图 → 写摘要 → 点发布。一套流程下来,10分钟没了。

今天教你一个方法:用AI+WordPress REST API搭建自动发布工作流。写完文章后,一条命令搞定所有发布步骤 🚀

🔧 你需要准备什么

1. 一个WordPress网站(已启用REST API,默认就是开启的)

2. 一个WordPress应用密码(比用账号密码安全10倍)

3. Python环境(或者Node.js,任选一个)

4. AI API(OpenAI/Claude/通义千问都行)

🔑 第一步:创建WordPress应用密码

登录WordPress后台 → 用户 → 个人资料 → 应用程序密码

输入一个名称(如"AI发布工具"),点击生成。系统会给你一串密码,立即复制保存,离开页面就看不到了 ⚠️

应用密码的好处:

- 不暴露你的主账号密码

- 可以随时撤销

- 可以限制权限

🐍 第二步:Python自动发布脚本

这是一个完整的自动发布脚本,可以直接用:

import requests
import base64
import json
import sys

# ===== 配置区 =====
WP_URL = "https://your-site.com"
WP_USER = "your_username"
WP_APP_PASSWORD = "xxxx xxxx xxxx xxxx xxxx xxxx"  # 应用密码
WP_CATEGORY_ID = 4  # 分类ID

# ===== 认证 =====
def get_auth():
    credentials = f"{WP_USER}:{WP_APP_PASSWORD}"
    token = base64.b64encode(credentials.encode()).decode()
    return f"Basic {token}"

# ===== 发布文章 =====
def publish_article(title, content, category_id, slug=None, status="publish"):
    auth = get_auth()
    
    data = {
        "title": title,
        "content": content,
        "status": status,
        "categories": [category_id],
    }
    
    if slug:
        data["slug"] = slug
    
    response = requests.post(
        f"{WP_URL}/wp-json/wp/v2/posts",
        headers={
            "Authorization": auth,
            "Content-Type": "application/json"
        },
        json=data
    )
    
    if response.status_code == 201:
        post = response.json()
        print(f"✅ 发布成功!")
        print(f"   文章ID: {post['id']}")
        print(f"   链接: {post['link']}")
        return post
    else:
        print(f"❌ 发布失败: {response.status_code}")
        print(response.text)
        return None

# ===== 使用示例 =====
if __name__ == "__main__":
    title = "我的AI工具推荐文章"
    content = "<p>这是文章内容,支持HTML格式</p>"
    
    post = publish_article(
        title=title,
        content=content,
        category_id=WP_CATEGORY_ID,
        slug="ai-tools-recommendation"
    )

📤 第三步:上传媒体文件(封面图)

文章有了,还得上传封面图。同样可以用API搞定:

def upload_media(file_path, title=""):
    auth = get_auth()
    
    with open(file_path, "rb") as f:
        file_data = f.read()
    
    # 根据文件扩展名判断MIME类型
    ext = file_path.split(".")[-1].lower()
    mime_map = {
        "jpg": "image/jpeg",
        "jpeg": "image/jpeg",
        "png": "image/png",
        "gif": "image/gif",
        "webp": "image/webp"
    }
    mime_type = mime_map.get(ext, "image/jpeg")
    
    filename = file_path.split("/")[-1]
    
    response = requests.post(
        f"{WP_URL}/wp-json/wp/v2/media",
        headers={
            "Authorization": auth,
            "Content-Disposition": f'attachment; filename="{filename}"',
            "Content-Type": mime_type
        },
        data=file_data
    )
    
    if response.status_code == 201:
        media = response.json()
        print(f"✅ 上传成功!媒体ID: {media['id']}")
        return media["id"]
    else:
        print(f"❌ 上传失败: {response.status_code}")
        return None

# 上传后设置为文章特色图片
def set_featured_image(post_id, media_id):
    auth = get_auth()
    
    response = requests.post(
        f"{WP_URL}/wp-json/wp/v2/posts/{post_id}",
        headers={
            "Authorization": auth,
            "Content-Type": "application/json"
        },
        json={"featured_media": media_id}
    )
    
    if response.status_code == 200:
        print(f"✅ 封面图设置成功!")
    else:
        print(f"❌ 设置失败: {response.status_code}")

🤖 第四步:让AI帮你生成内容

现在把AI集成进来,实现从选题到发布的全自动:

import openai

def generate_article(topic, keyword):
    """用AI生成博客文章"""
    client = openai.OpenAI(api_key="your-api-key")
    
    prompt = f"""请写一篇WordPress博客文章:
主题:{topic}
目标关键词:{keyword}
字数:1500-2000字
风格:微信公众号技术号,短句,有emoji

要求:
1. HTML格式,使用内联style
2. 包含H2标题结构
3. 有实用的操作步骤
4. 结尾有互动引导
5. 不能有AI痕迹(不能用"此外""值得一提"等词)"""
    
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}]
    )
    
    return response.choices[0].message.content

# ===== 一键发布流程 =====
def auto_publish(topic, keyword, category_id):
    """从生成到发布一条龙"""
    print("📝 正在生成文章...")
    content = generate_article(topic, keyword)
    
    print("📤 正在发布文章...")
    slug = topic.lower().replace(" ", "-")[:50]
    post = publish_article(
        title=topic,
        content=content,
        category_id=category_id,
        slug=slug
    )
    
    if post:
        print(f"\n🎉 完成!")
        print(f"   链接: {post['link']}")
    
    return post

⚡ 进阶:定时批量发布

如果你有多个选题,可以一次性生成,然后定时发布:

from datetime import datetime, timedelta

def schedule_posts(topics, start_date, days_interval=1):
    """批量定时发布"""
    current_date = start_date
    
    for topic in topics:
        content = generate_article(topic["title"], topic["keyword"])
        
        # 创建为草稿,设置日期
        data = {
            "title": topic["title"],
            "content": content,
            "status": "future",  # 定时发布状态
            "date": current_date.isoformat(),
            "categories": [topic["category_id"]],
            "slug": topic["slug"]
        }
        
        # POST到WordPress
        response = requests.post(
            f"{WP_URL}/wp-json/wp/v2/posts",
            headers={"Authorization": get_auth()},
            json=data
        )
        
        if response.status_code == 201:
            print(f"✅ 已排期: {topic['title']} → {current_date.strftime('%Y-%m-%d')}")
        
        current_date += timedelta(days=days_interval)

# 示例:一次性排期一周的文章
topics = [
    {"title": "周一:AI写作工具推荐", "keyword": "AI写作", "category_id": 3, "slug": "ai-writing-tools"},
    {"title": "周三:ChatGPT提示词技巧", "keyword": "ChatGPT提示词", "category_id": 6, "slug": "chatgpt-prompts"},
    {"title": "周五:AI做数据分析教程", "keyword": "AI数据分析", "category_id": 4, "slug": "ai-data-analysis"},
]

schedule_posts(
    topics,
    start_date=datetime(2026, 8, 18),
    days_interval=2
)

🛡️ 安全注意事项

1. 应用密码不要提交到GitHub——用环境变量存储

2. API密钥同理——写在.env文件里,.gitignore排除

3. 先用draft测试——正式发布前先设status="draft"检查效果

4. 控制频率——WordPress有API速率限制,别一口气发太多

这套工作流我用了3个月,现在每周日花2小时生成下周的文章,然后自动定时发布。剩下的时间专心做内容策划和数据分析,效率提升了不止一个档次 💪

你有在用WordPress REST API吗?评论区聊聊你的使用场景 👇

发表评论