名称: wordpress-publisher
描述: 通过 REST API 直接向 WordPress 网站发布内容,完全支持古腾堡(Gutenberg)区块。可创建和发布文章/页面、自动加载并选择网站分类、生成 SEO 优化标签、发布前预览文章,并为表格、图片、列表和富文本格式生成古腾堡区块。适用于用户想要发布到 WordPress、发布博客文章、创建 WordPress 文章、更新 WordPress 文章或将 Markdown 转换为古腾堡区块的场景。
作者: xCloud
版本: 1.0.0
使用 REST API 直接向 WordPress 网站发布内容,支持完整的古腾堡区块格式化、自动分类选择、SEO 标签生成和预览功能。
1. 连接 → 与 WordPress 站点进行身份验证
2. 分析 → 从站点加载分类,分析内容以寻找最佳匹配
3. 生成 → 基于内容创建 SEO 优化标签
4. 转换 → 将 Markdown/HTML 转换为古腾堡区块
5. 预览 → 创建草稿并验证渲染效果
6. 发布 → 发布或定时发布文章
7. 验证 → 确认已发布文章正确显示
向用户询问:
- WordPress 站点 URL(例如 https://example.com)
- WordPress 用户名
- 应用程序密码(非常规密码)
引导用户:
1. 在 WordPress 管理后台进入 用户 → 个人资料
2. 滚动到 应用程序密码 部分
3. 输入名称:Claude Publisher
4. 点击 添加新的应用程序密码
5. 复制生成的密码(仅显示一次,带空格)
from scripts.wp_publisher import WordPressPublisher
wp = WordPressPublisher(
site_url="https://example.com",
username="admin",
password="xxxx xxxx xxxx xxxx xxxx xxxx" # 应用程序密码
)
# 测试连接
user_info = wp.test_connection()
print(f"已连接为:{user_info['name']}")
# 从 WordPress 站点获取所有分类
categories = wp.get_categories_with_details()
# 返回类似列表:
# [
# {'id': 1, 'name': '未分类', 'slug': 'uncategorized', 'count': 5},
# {'id': 2, 'name': '教程', 'slug': 'tutorials', 'count': 12},
# {'id': 3, 'name': '云托管', 'slug': 'cloud-hosting', 'count': 8},
# ]
系统分析内容并选择最合适的分类:
# 分析内容并建议最佳分类
suggested_category = wp.suggest_category(
content=article_content,
title=article_title,
available_categories=categories
)
# 或让用户从可用选项中选择
print("可用分类:")
for cat in categories:
print(f" [{cat['id']}] {cat['name']} ({cat['count']} 篇文章)")
生成可提高 Google 搜索可见性的标签:
# 基于内容分析生成标签
tags = wp.generate_seo_tags(
content=article_content,
title=article_title,
max_tags=10
)
# 返回类似列表:
# ['n8n 托管', '工作流自动化', '自托管 n8n',
# '经济型托管', 'Docker 部署', 'Node.js 托管']
# 获取或创建所有标签,返回标签 ID 列表
tag_ids = wp.get_or_create_tags(tags)
from scripts.content_to_gutenberg import convert_to_gutenberg
# 转换 Markdown 内容
gutenberg_content = convert_to_gutenberg(markdown_content)
| Markdown | 古腾堡区块 |
|---|---|
# 标题 |
wp:heading |
**粗体** |
段落中的 <strong> |
- 列表项 |
wp:list |
1. 有序列表 |
wp:list {"ordered":true} |
\``代码```|wp:code` |
|
> 引用 |
wp:quote |
 |
wp:image |
\| 表格 \| |
wp:table |
表格被转换为具有正确古腾堡结构:
# 输入 Markdown:
| 功能 | 方案 A | 方案 B |
|---------|--------|--------|
| 价格 | $10 | $20 |
# 输出古腾堡:
<!-- wp:table -->
<figure class="wp-block-table"><table>
<thead><tr><th>功能</th><th>方案 A</th><th>方案 B</th></tr></thead>
<tbody><tr><td>价格</td><td>$10</td><td>$20</td></tr></tbody>
</table></figure>
<!-- /wp:table -->
# 首先创建为草稿
result = wp.create_draft(
title="文章标题",
content=gutenberg_content,
categories=[category_id],
tags=tag_ids,
excerpt="自动生成或自定义摘要"
)
post_id = result['post_id']
preview_url = result['preview_url']
edit_url = result['edit_url']
# 获取预览页面以验证渲染效果
preview_content = wp.fetch_preview(post_id)
# 检查问题
issues = wp.validate_rendered_content(preview_content)
if issues:
print("发现问题:")
for issue in issues:
print(f" - {issue}")
# 预览批准后,发布
result = wp.publish_post(post_id)
live_url = result['live_url']
# 在一个调用中完成完整发布工作流程
result = wp.publish_content(
title="文章标题",
content=gutenberg_content,
category_names=["云托管"], # 按名称,自动解析为 ID
tag_names=["n8n", "托管", "自动化"],
status="publish", # 或 "draft"、"pending"、"private"、"future"
excerpt="用于 SEO 的自定义摘要",
slug="自定义-URL-别名"
)
# 安排未来发布时间
from datetime import datetime, timedelta
publish_date = datetime.now() + timedelta(days=1)
result = wp.publish_content(
title="定时发布文章",
content=content,
status="future",
date=publish_date.isoformat()
)
# 验证已发布文章
verification = wp.verify_published_post(post_id)
print(f"实时 URL:{verification['url']}")
print(f"状态:{verification['status']}")
print(f"分类:{verification['categories']}")
print(f"标签:{verification['tags']}")
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 表格未渲染 | 缺少 figure 包装器 | 使用正确的 wp:table 区块结构 |
| 代码未高亮 | 缺少语言属性 | 为代码块添加 {"language":"python"} |
| 图片损坏 | URL 错误或缺少媒体文件 | 先上传到 WordPress,使用媒体 ID |
| 标签未显示 | 主题不显示标签 | 检查主题设置或使用不同主题 |
from scripts.wp_publisher import WordPressPublisher
from scripts.content_to_gutenberg import convert_to_gutenberg
# 1. 连接
wp = WordPressPublisher(
site_url="https://xcloud.host",
username="admin",
password="xxxx xxxx xxxx xxxx"
)
# 2. 加载分类并选择最佳匹配
categories = wp.get_categories_with_details()
best_category = wp.suggest_category(content, title, categories)
# 3. 生成 SEO 标签
tags = wp.generate_seo_tags(content, title, max_tags=10)
# 4. 转换为古腾堡
gutenberg_content = convert_to_gutenberg(markdown_content)
# 5. 创建草稿并预览
draft = wp.create_draft(
title="2026 年 7 个最佳 n8n 托管服务商",
content=gutenberg_content,
categories=[best_category['id']],
tags=wp.get_or_create_tags(tags)
)
print(f"预览:{draft['preview_url']}")
# 6. 验证后,发布
result = wp.publish_post(draft['post_id'])
print(f"已发布:{result['live_url']}")
| 资源 | 端点 |
|---|---|
| 文章 | /wp-json/wp/v2/posts |
| 页面 | /wp-json/wp/v2/pages |
| 分类 | /wp-json/wp/v2/categories |
| 标签 | /wp-json/wp/v2/tags |
| 媒体 | /wp-json/wp/v2/media |
| 状态 | 描述 |
|---|---|
publish |
实时且可见 |
draft |
已保存但不可见 |
pending |
等待审核 |
private |
仅管理员可见 |
future |
定时发布 |
scripts/wp_publisher.py - 主要发布器类scripts/content_to_gutenberg.py - Markdown/HTML 转换器references/gutenberg-blocks.md - 区块格式参考| 错误代码 | 含义 | 解决方案 |
|---|---|---|
| 401 | 凭据无效 | 检查用户名和应用程序密码 |
| 403 | 权限不足 | 用户需要编辑者或管理员角色 |
| 404 | 端点未找到 | 验证 REST API 是否启用 |
| 400 | 数据无效 | 检查分类/标签 ID 是否存在 |
| 500 | 服务器错误 | 重试或检查 WordPress 错误日志 |