[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6N5FSJ220F4G2ZF9NFBNGET":3,"skill-same:01M6N5FSJ220F4G2ZF9NFBNGET":165},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":33,"publishedAt":54,"linkOnly":55,"markdownContent":56,"markdownBody":57,"frontMatter":58,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":64,"repositoryHtmlUrl":65,"repositoryHomepageUrl":6,"ownerHtmlUrl":66,"ownerBlogUrl":6,"ownerDescription":67,"updatedAt":68,"install":69,"resources":82},"01M6N5FSJ220F4G2ZF9NFBNGET","wordpress-publisher",null,"Publish content directly to WordPress sites via REST API with full Gutenberg block support. Create and publish posts\u002Fpages, auto-load and select categories from website, generate SEO-optimized tags, preview articles before publishing, and generate Gutenberg blocks for tables, images, lists, and rich formatting. Use when user wants to publish to WordPress, post to blog, create WordPress article, update WordPress post, or convert markdown to Gutenberg blocks.","Kernel8901\u002Fai-agent-skills-classification","Kernel8901","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F72647553?v=4","01M6KV388J2H5PNC8D8P940BJD","01M6KV38CS5B3AY63RKZB410YM",7,"MIT","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002FSKILL.md",[17,22,25,30],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000019","营销推广",{"categoryNo":26,"categoryName":27,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000035","市场营销","PROFESSION","适用职业",{"categoryNo":31,"categoryName":32,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000036","内容创作者",[34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],"publisher","wordpress publisher","wordpress","auto","posts","categories","formatting","article","full","preview","images","select","markdown","api","publish","website","update","generate","create","support","2026-11-10 10:12:30",false,"---\nname: wordpress-publisher\ndescription: Publish content directly to WordPress sites via REST API with full Gutenberg block support. Create and publish posts\u002Fpages, auto-load and select categories from website, generate SEO-optimized tags, preview articles before publishing, and generate Gutenberg blocks for tables, images, lists, and rich formatting. Use when user wants to publish to WordPress, post to blog, create WordPress article, update WordPress post, or convert markdown to Gutenberg blocks.\nauthor: xCloud\nversion: 1.0.0\n---\n\n# WordPress Publisher\n\nPublish content directly to WordPress sites using the REST API with full Gutenberg block formatting, automatic category selection, SEO tag generation, and preview capabilities.\n\n## Complete Workflow Overview\n\n```\n1. CONNECT    → Authenticate with WordPress site\n2. ANALYZE    → Load categories from site, analyze content for best match\n3. GENERATE   → Create SEO-optimized tags based on content\n4. CONVERT    → Transform markdown\u002FHTML to Gutenberg blocks\n5. PREVIEW    → Create draft and verify rendering\n6. PUBLISH    → Publish or schedule the post\n7. VERIFY     → Confirm live post renders correctly\n```\n\n---\n\n## Step 1: Connection Setup\n\n### Get Credentials\nAsk user for:\n- WordPress site URL (e.g., `https:\u002F\u002Fexample.com`)\n- WordPress username\n- Application password (NOT regular password)\n\n### How to Create Application Password\nGuide user:\n1. Go to **Users → Profile** in WordPress admin\n2. Scroll to **Application Passwords** section\n3. Enter name: `Claude Publisher`\n4. Click **Add New Application Password**\n5. Copy the generated password (shown only once, with spaces)\n\n### Test Connection\n```python\nfrom scripts.wp_publisher import WordPressPublisher\n\nwp = WordPressPublisher(\n    site_url=\"https:\u002F\u002Fexample.com\",\n    username=\"admin\",\n    password=\"xxxx xxxx xxxx xxxx xxxx xxxx\"  # Application password\n)\n\n# Test connection\nuser_info = wp.test_connection()\nprint(f\"Connected as: {user_info['name']}\")\n```\n\n---\n\n## Step 2: Load and Select Categories\n\n### Auto-Load Categories from Site\n```python\n# Get all categories from the WordPress site\ncategories = wp.get_categories_with_details()\n\n# Returns list like:\n# [\n#   {'id': 1, 'name': 'Uncategorized', 'slug': 'uncategorized', 'count': 5},\n#   {'id': 2, 'name': 'Tutorials', 'slug': 'tutorials', 'count': 12},\n#   {'id': 3, 'name': 'Cloud Hosting', 'slug': 'cloud-hosting', 'count': 8},\n# ]\n```\n\n### Smart Category Selection\nThe system analyzes content and selects the most appropriate category:\n\n```python\n# Analyze content and suggest best category\nsuggested_category = wp.suggest_category(\n    content=article_content,\n    title=article_title,\n    available_categories=categories\n)\n\n# Or let user choose from available options\nprint(\"Available categories:\")\nfor cat in categories:\n    print(f\"  [{cat['id']}] {cat['name']} ({cat['count']} posts)\")\n```\n\n### Category Selection Logic\n1. **Exact match** - Title\u002Fcontent contains category name\n2. **Keyword match** - Category slug matches topic keywords\n3. **Parent category** - Fall back to broader parent if no match\n4. **Create new** - Create category if none fit (with user approval)\n\n---\n\n## Step 3: Generate SEO-Optimized Tags\n\n### Automatic Tag Generation\nGenerate tags that improve Google search visibility:\n\n```python\n# Generate tags based on content analysis\ntags = wp.generate_seo_tags(\n    content=article_content,\n    title=article_title,\n    max_tags=10\n)\n\n# Returns list like:\n# ['n8n hosting', 'workflow automation', 'self-hosted n8n', \n#  'affordable hosting', 'docker deployment', 'node.js hosting']\n```\n\n### Tag Generation Rules\n1. **Primary keyword** - Always include as first tag\n2. **Secondary keywords** - Include 2-3 related terms\n3. **Long-tail keywords** - Include 3-4 specific phrases\n4. **Entity tags** - Include product\u002Fbrand names mentioned\n5. **Topic tags** - Include broader category terms\n\n### Create\u002FGet Tags in WordPress\n```python\n# Get or create all tags, returns list of tag IDs\ntag_ids = wp.get_or_create_tags(tags)\n```\n\n---\n\n## Step 4: Convert Content to Gutenberg Blocks\n\n### Markdown to Gutenberg\n```python\nfrom scripts.content_to_gutenberg import convert_to_gutenberg\n\n# Convert markdown content\ngutenberg_content = convert_to_gutenberg(markdown_content)\n```\n\n### Supported Conversions\n\n| Markdown | Gutenberg Block |\n|----------|-----------------|\n| `# Heading` | `wp:heading` |\n| `**bold**` | `\u003Cstrong>` in paragraph |\n| `- list item` | `wp:list` |\n| `1. ordered` | `wp:list {\"ordered\":true}` |\n| `\\`\\`\\`code\\`\\`\\`` | `wp:code` |\n| `> quote` | `wp:quote` |\n| `![alt](url)` | `wp:image` |\n| `\\| table \\|` | `wp:table` |\n\n### Table Conversion (Critical for AI Content)\nTables are converted with proper Gutenberg structure:\n\n```python\n# Input markdown:\n| Feature | Plan A | Plan B |\n|---------|--------|--------|\n| Price   | $10    | $20    |\n\n# Output Gutenberg:\n\u003C!-- wp:table -->\n\u003Cfigure class=\"wp-block-table\">\u003Ctable>\n  \u003Cthead>\u003Ctr>\u003Cth>Feature\u003C\u002Fth>\u003Cth>Plan A\u003C\u002Fth>\u003Cth>Plan B\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n  \u003Ctbody>\u003Ctr>\u003Ctd>Price\u003C\u002Ftd>\u003Ctd>$10\u003C\u002Ftd>\u003Ctd>$20\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\n\u003C\u002Ftable>\u003C\u002Ffigure>\n\u003C!-- \u002Fwp:table -->\n```\n\n---\n\n## Step 5: Preview Before Publishing\n\n### Create Draft for Preview\n```python\n# Create as draft first\nresult = wp.create_draft(\n    title=\"Article Title\",\n    content=gutenberg_content,\n    categories=[category_id],\n    tags=tag_ids,\n    excerpt=\"Auto-generated or custom excerpt\"\n)\n\npost_id = result['post_id']\npreview_url = result['preview_url']\nedit_url = result['edit_url']\n```\n\n### Verify Preview\n```python\n# Fetch preview page to verify rendering\npreview_content = wp.fetch_preview(post_id)\n\n# Check for issues\nissues = wp.validate_rendered_content(preview_content)\nif issues:\n    print(\"Issues found:\")\n    for issue in issues:\n        print(f\"  - {issue}\")\n```\n\n### Preview Checklist\n- [ ] Title displays correctly\n- [ ] All headings render (H2, H3, H4)\n- [ ] Tables render with proper formatting\n- [ ] Lists display correctly (bullet and numbered)\n- [ ] Code blocks have syntax highlighting\n- [ ] Images load (if any)\n- [ ] Links are clickable\n- [ ] Category shows correctly\n- [ ] Tags display in post\n\n---\n\n## Step 6: Publish the Post\n\n### Publish Draft\n```python\n# After preview approval, publish\nresult = wp.publish_post(post_id)\nlive_url = result['live_url']\n```\n\n### Or Create and Publish Directly\n```python\n# Full publish workflow in one call\nresult = wp.publish_content(\n    title=\"Article Title\",\n    content=gutenberg_content,\n    category_names=[\"Cloud Hosting\"],  # By name, auto-resolves to ID\n    tag_names=[\"n8n\", \"hosting\", \"automation\"],\n    status=\"publish\",  # or \"draft\", \"pending\", \"private\", \"future\"\n    excerpt=\"Custom excerpt for SEO\",\n    slug=\"custom-url-slug\"\n)\n```\n\n### Scheduling Posts\n```python\n# Schedule for future publication\nfrom datetime import datetime, timedelta\n\npublish_date = datetime.now() + timedelta(days=1)\nresult = wp.publish_content(\n    title=\"Scheduled Post\",\n    content=content,\n    status=\"future\",\n    date=publish_date.isoformat()\n)\n```\n\n---\n\n## Step 7: Verify Published Post\n\n### Check Live Post\n```python\n# Verify the published post\nverification = wp.verify_published_post(post_id)\n\nprint(f\"Live URL: {verification['url']}\")\nprint(f\"Status: {verification['status']}\")\nprint(f\"Categories: {verification['categories']}\")\nprint(f\"Tags: {verification['tags']}\")\n```\n\n### Common Issues and Fixes\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Tables not rendering | Missing figure wrapper | Use proper `wp:table` block structure |\n| Code not highlighted | Missing language attribute | Add `{\"language\":\"python\"}` to code block |\n| Images broken | Wrong URL or missing media | Upload to WordPress first, use media ID |\n| Tags not showing | Theme doesn't display tags | Check theme settings or use different theme |\n\n---\n\n## Complete Example Workflow\n\n```python\nfrom scripts.wp_publisher import WordPressPublisher\nfrom scripts.content_to_gutenberg import convert_to_gutenberg\n\n# 1. Connect\nwp = WordPressPublisher(\n    site_url=\"https:\u002F\u002Fxcloud.host\",\n    username=\"admin\",\n    password=\"xxxx xxxx xxxx xxxx\"\n)\n\n# 2. Load categories and select best match\ncategories = wp.get_categories_with_details()\nbest_category = wp.suggest_category(content, title, categories)\n\n# 3. Generate SEO tags\ntags = wp.generate_seo_tags(content, title, max_tags=10)\n\n# 4. Convert to Gutenberg\ngutenberg_content = convert_to_gutenberg(markdown_content)\n\n# 5. Create draft and preview\ndraft = wp.create_draft(\n    title=\"7 Best n8n Hosting Providers in 2026\",\n    content=gutenberg_content,\n    categories=[best_category['id']],\n    tags=wp.get_or_create_tags(tags)\n)\nprint(f\"Preview: {draft['preview_url']}\")\n\n# 6. After verification, publish\nresult = wp.publish_post(draft['post_id'])\nprint(f\"Published: {result['live_url']}\")\n```\n\n---\n\n## Quick Reference\n\n### API Endpoints\n| Resource | Endpoint |\n|----------|----------|\n| Posts | `\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts` |\n| Pages | `\u002Fwp-json\u002Fwp\u002Fv2\u002Fpages` |\n| Categories | `\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories` |\n| Tags | `\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags` |\n| Media | `\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia` |\n\n### Post Statuses\n| Status | Description |\n|--------|-------------|\n| `publish` | Live and visible |\n| `draft` | Saved but not visible |\n| `pending` | Awaiting review |\n| `private` | Only visible to admins |\n| `future` | Scheduled for later |\n\n### Required Files\n- `scripts\u002Fwp_publisher.py` - Main publisher class\n- `scripts\u002Fcontent_to_gutenberg.py` - Markdown\u002FHTML converter\n- `references\u002Fgutenberg-blocks.md` - Block format reference\n\n---\n\n## Error Handling\n\n| Error Code | Meaning | Solution |\n|------------|---------|----------|\n| 401 | Invalid credentials | Check username and application password |\n| 403 | Insufficient permissions | User needs Editor or Admin role |\n| 404 | Endpoint not found | Verify REST API is enabled |\n| 400 | Invalid data | Check category\u002Ftag IDs exist |\n| 500 | Server error | Retry or check WordPress error logs |\n\n---\n\n## Best Practices\n\n1. **Always preview first** - Create as draft, verify, then publish\n2. **Use application passwords** - Never use regular WordPress password\n3. **Select appropriate category** - Helps with site organization and SEO\n4. **Generate relevant tags** - Improves Google discoverability\n5. **Validate Gutenberg blocks** - Ensure proper block structure\n6. **Keep excerpts under 160 chars** - Optimal for search snippets\n7. **Use descriptive slugs** - Include primary keyword in URL\n","# WordPress Publisher\n\nPublish content directly to WordPress sites using the REST API with full Gutenberg block formatting, automatic category selection, SEO tag generation, and preview capabilities.\n\n## Complete Workflow Overview\n\n```\n1. CONNECT    → Authenticate with WordPress site\n2. ANALYZE    → Load categories from site, analyze content for best match\n3. GENERATE   → Create SEO-optimized tags based on content\n4. CONVERT    → Transform markdown\u002FHTML to Gutenberg blocks\n5. PREVIEW    → Create draft and verify rendering\n6. PUBLISH    → Publish or schedule the post\n7. VERIFY     → Confirm live post renders correctly\n```\n\n---\n\n## Step 1: Connection Setup\n\n### Get Credentials\nAsk user for:\n- WordPress site URL (e.g., `https:\u002F\u002Fexample.com`)\n- WordPress username\n- Application password (NOT regular password)\n\n### How to Create Application Password\nGuide user:\n1. Go to **Users → Profile** in WordPress admin\n2. Scroll to **Application Passwords** section\n3. Enter name: `Claude Publisher`\n4. Click **Add New Application Password**\n5. Copy the generated password (shown only once, with spaces)\n\n### Test Connection\n```python\nfrom scripts.wp_publisher import WordPressPublisher\n\nwp = WordPressPublisher(\n    site_url=\"https:\u002F\u002Fexample.com\",\n    username=\"admin\",\n    password=\"xxxx xxxx xxxx xxxx xxxx xxxx\"  # Application password\n)\n\n# Test connection\nuser_info = wp.test_connection()\nprint(f\"Connected as: {user_info['name']}\")\n```\n\n---\n\n## Step 2: Load and Select Categories\n\n### Auto-Load Categories from Site\n```python\n# Get all categories from the WordPress site\ncategories = wp.get_categories_with_details()\n\n# Returns list like:\n# [\n#   {'id': 1, 'name': 'Uncategorized', 'slug': 'uncategorized', 'count': 5},\n#   {'id': 2, 'name': 'Tutorials', 'slug': 'tutorials', 'count': 12},\n#   {'id': 3, 'name': 'Cloud Hosting', 'slug': 'cloud-hosting', 'count': 8},\n# ]\n```\n\n### Smart Category Selection\nThe system analyzes content and selects the most appropriate category:\n\n```python\n# Analyze content and suggest best category\nsuggested_category = wp.suggest_category(\n    content=article_content,\n    title=article_title,\n    available_categories=categories\n)\n\n# Or let user choose from available options\nprint(\"Available categories:\")\nfor cat in categories:\n    print(f\"  [{cat['id']}] {cat['name']} ({cat['count']} posts)\")\n```\n\n### Category Selection Logic\n1. **Exact match** - Title\u002Fcontent contains category name\n2. **Keyword match** - Category slug matches topic keywords\n3. **Parent category** - Fall back to broader parent if no match\n4. **Create new** - Create category if none fit (with user approval)\n\n---\n\n## Step 3: Generate SEO-Optimized Tags\n\n### Automatic Tag Generation\nGenerate tags that improve Google search visibility:\n\n```python\n# Generate tags based on content analysis\ntags = wp.generate_seo_tags(\n    content=article_content,\n    title=article_title,\n    max_tags=10\n)\n\n# Returns list like:\n# ['n8n hosting', 'workflow automation', 'self-hosted n8n', \n#  'affordable hosting', 'docker deployment', 'node.js hosting']\n```\n\n### Tag Generation Rules\n1. **Primary keyword** - Always include as first tag\n2. **Secondary keywords** - Include 2-3 related terms\n3. **Long-tail keywords** - Include 3-4 specific phrases\n4. **Entity tags** - Include product\u002Fbrand names mentioned\n5. **Topic tags** - Include broader category terms\n\n### Create\u002FGet Tags in WordPress\n```python\n# Get or create all tags, returns list of tag IDs\ntag_ids = wp.get_or_create_tags(tags)\n```\n\n---\n\n## Step 4: Convert Content to Gutenberg Blocks\n\n### Markdown to Gutenberg\n```python\nfrom scripts.content_to_gutenberg import convert_to_gutenberg\n\n# Convert markdown content\ngutenberg_content = convert_to_gutenberg(markdown_content)\n```\n\n### Supported Conversions\n\n| Markdown | Gutenberg Block |\n|----------|-----------------|\n| `# Heading` | `wp:heading` |\n| `**bold**` | `\u003Cstrong>` in paragraph |\n| `- list item` | `wp:list` |\n| `1. ordered` | `wp:list {\"ordered\":true}` |\n| `\\`\\`\\`code\\`\\`\\`` | `wp:code` |\n| `> quote` | `wp:quote` |\n| `![alt](url)` | `wp:image` |\n| `\\| table \\|` | `wp:table` |\n\n### Table Conversion (Critical for AI Content)\nTables are converted with proper Gutenberg structure:\n\n```python\n# Input markdown:\n| Feature | Plan A | Plan B |\n|---------|--------|--------|\n| Price   | $10    | $20    |\n\n# Output Gutenberg:\n\u003C!-- wp:table -->\n\u003Cfigure class=\"wp-block-table\">\u003Ctable>\n  \u003Cthead>\u003Ctr>\u003Cth>Feature\u003C\u002Fth>\u003Cth>Plan A\u003C\u002Fth>\u003Cth>Plan B\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n  \u003Ctbody>\u003Ctr>\u003Ctd>Price\u003C\u002Ftd>\u003Ctd>$10\u003C\u002Ftd>\u003Ctd>$20\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\n\u003C\u002Ftable>\u003C\u002Ffigure>\n\u003C!-- \u002Fwp:table -->\n```\n\n---\n\n## Step 5: Preview Before Publishing\n\n### Create Draft for Preview\n```python\n# Create as draft first\nresult = wp.create_draft(\n    title=\"Article Title\",\n    content=gutenberg_content,\n    categories=[category_id],\n    tags=tag_ids,\n    excerpt=\"Auto-generated or custom excerpt\"\n)\n\npost_id = result['post_id']\npreview_url = result['preview_url']\nedit_url = result['edit_url']\n```\n\n### Verify Preview\n```python\n# Fetch preview page to verify rendering\npreview_content = wp.fetch_preview(post_id)\n\n# Check for issues\nissues = wp.validate_rendered_content(preview_content)\nif issues:\n    print(\"Issues found:\")\n    for issue in issues:\n        print(f\"  - {issue}\")\n```\n\n### Preview Checklist\n- [ ] Title displays correctly\n- [ ] All headings render (H2, H3, H4)\n- [ ] Tables render with proper formatting\n- [ ] Lists display correctly (bullet and numbered)\n- [ ] Code blocks have syntax highlighting\n- [ ] Images load (if any)\n- [ ] Links are clickable\n- [ ] Category shows correctly\n- [ ] Tags display in post\n\n---\n\n## Step 6: Publish the Post\n\n### Publish Draft\n```python\n# After preview approval, publish\nresult = wp.publish_post(post_id)\nlive_url = result['live_url']\n```\n\n### Or Create and Publish Directly\n```python\n# Full publish workflow in one call\nresult = wp.publish_content(\n    title=\"Article Title\",\n    content=gutenberg_content,\n    category_names=[\"Cloud Hosting\"],  # By name, auto-resolves to ID\n    tag_names=[\"n8n\", \"hosting\", \"automation\"],\n    status=\"publish\",  # or \"draft\", \"pending\", \"private\", \"future\"\n    excerpt=\"Custom excerpt for SEO\",\n    slug=\"custom-url-slug\"\n)\n```\n\n### Scheduling Posts\n```python\n# Schedule for future publication\nfrom datetime import datetime, timedelta\n\npublish_date = datetime.now() + timedelta(days=1)\nresult = wp.publish_content(\n    title=\"Scheduled Post\",\n    content=content,\n    status=\"future\",\n    date=publish_date.isoformat()\n)\n```\n\n---\n\n## Step 7: Verify Published Post\n\n### Check Live Post\n```python\n# Verify the published post\nverification = wp.verify_published_post(post_id)\n\nprint(f\"Live URL: {verification['url']}\")\nprint(f\"Status: {verification['status']}\")\nprint(f\"Categories: {verification['categories']}\")\nprint(f\"Tags: {verification['tags']}\")\n```\n\n### Common Issues and Fixes\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Tables not rendering | Missing figure wrapper | Use proper `wp:table` block structure |\n| Code not highlighted | Missing language attribute | Add `{\"language\":\"python\"}` to code block |\n| Images broken | Wrong URL or missing media | Upload to WordPress first, use media ID |\n| Tags not showing | Theme doesn't display tags | Check theme settings or use different theme |\n\n---\n\n## Complete Example Workflow\n\n```python\nfrom scripts.wp_publisher import WordPressPublisher\nfrom scripts.content_to_gutenberg import convert_to_gutenberg\n\n# 1. Connect\nwp = WordPressPublisher(\n    site_url=\"https:\u002F\u002Fxcloud.host\",\n    username=\"admin\",\n    password=\"xxxx xxxx xxxx xxxx\"\n)\n\n# 2. Load categories and select best match\ncategories = wp.get_categories_with_details()\nbest_category = wp.suggest_category(content, title, categories)\n\n# 3. Generate SEO tags\ntags = wp.generate_seo_tags(content, title, max_tags=10)\n\n# 4. Convert to Gutenberg\ngutenberg_content = convert_to_gutenberg(markdown_content)\n\n# 5. Create draft and preview\ndraft = wp.create_draft(\n    title=\"7 Best n8n Hosting Providers in 2026\",\n    content=gutenberg_content,\n    categories=[best_category['id']],\n    tags=wp.get_or_create_tags(tags)\n)\nprint(f\"Preview: {draft['preview_url']}\")\n\n# 6. After verification, publish\nresult = wp.publish_post(draft['post_id'])\nprint(f\"Published: {result['live_url']}\")\n```\n\n---\n\n## Quick Reference\n\n### API Endpoints\n| Resource | Endpoint |\n|----------|----------|\n| Posts | `\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts` |\n| Pages | `\u002Fwp-json\u002Fwp\u002Fv2\u002Fpages` |\n| Categories | `\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories` |\n| Tags | `\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags` |\n| Media | `\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia` |\n\n### Post Statuses\n| Status | Description |\n|--------|-------------|\n| `publish` | Live and visible |\n| `draft` | Saved but not visible |\n| `pending` | Awaiting review |\n| `private` | Only visible to admins |\n| `future` | Scheduled for later |\n\n### Required Files\n- `scripts\u002Fwp_publisher.py` - Main publisher class\n- `scripts\u002Fcontent_to_gutenberg.py` - Markdown\u002FHTML converter\n- `references\u002Fgutenberg-blocks.md` - Block format reference\n\n---\n\n## Error Handling\n\n| Error Code | Meaning | Solution |\n|------------|---------|----------|\n| 401 | Invalid credentials | Check username and application password |\n| 403 | Insufficient permissions | User needs Editor or Admin role |\n| 404 | Endpoint not found | Verify REST API is enabled |\n| 400 | Invalid data | Check category\u002Ftag IDs exist |\n| 500 | Server error | Retry or check WordPress error logs |\n\n---\n\n## Best Practices\n\n1. **Always preview first** - Create as draft, verify, then publish\n2. **Use application passwords** - Never use regular WordPress password\n3. **Select appropriate category** - Helps with site organization and SEO\n4. **Generate relevant tags** - Improves Google discoverability\n5. **Validate Gutenberg blocks** - Ensure proper block structure\n6. **Keep excerpts under 160 chars** - Optimal for search snippets\n7. **Use descriptive slugs** - Include primary keyword in URL\n",{"name":5,"author":59,"version":60,"description":7},"xCloud","1.0.0","main","f4cb2d49f7667e79ef7804f50396d5aaffdf1f56","内容创意\u002Fwordpress-publishing-skill-for-claude",1,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification","https:\u002F\u002Fgithub.com\u002FKernel8901","a little little little dobe in life but science geek","2026-04-05 16:43:56",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add Kernel8901\u002Fai-agent-skills-classification --skill wordpress-publisher",{"tool":75,"command":76},"bunx","bunx skills add Kernel8901\u002Fai-agent-skills-classification --skill wordpress-publisher",{"tool":78,"command":79},"pnpm","pnpm dlx skills add Kernel8901\u002Fai-agent-skills-classification --skill wordpress-publisher","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002FSKILL.md",true,[83,89,93,97,101,105,109,113,117,121,127,131,135,139,143,149,153,157,161],{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"_meta.json","REFERENCE","参考文档",315,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002F_meta.json",{"path":90,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":91,"sourceHtmlUrl":92},".claude-plugin\u002Fmarketplace.json",1677,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002F.claude-plugin\u002Fmarketplace.json",{"path":94,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":95,"sourceHtmlUrl":96},".claude-plugin\u002Fplugin.json",853,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002F.claude-plugin\u002Fplugin.json",{"path":98,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":99,"sourceHtmlUrl":100},".github\u002FISSUE_TEMPLATE\u002Fbug_report.md",639,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002F.github\u002FISSUE_TEMPLATE\u002Fbug_report.md",{"path":102,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":103,"sourceHtmlUrl":104},".github\u002FISSUE_TEMPLATE\u002Ffeature_request.md",900,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002F.github\u002FISSUE_TEMPLATE\u002Ffeature_request.md",{"path":106,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":107,"sourceHtmlUrl":108},".github\u002FPULL_REQUEST_TEMPLATE.md",1356,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002F.github\u002FPULL_REQUEST_TEMPLATE.md",{"path":110,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":111,"sourceHtmlUrl":112},".github\u002Fworkflows\u002Fci.yml",1651,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002F.github\u002Fworkflows\u002Fci.yml",{"path":114,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":115,"sourceHtmlUrl":116},"CHANGELOG.md",3618,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002FCHANGELOG.md",{"path":118,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":119,"sourceHtmlUrl":120},"CONTRIBUTING.md",9324,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002FCONTRIBUTING.md",{"path":122,"resourceType":123,"resourceTypeDesc":124,"sizeBytes":125,"sourceHtmlUrl":126},"pytest.ini","OTHER","其他",173,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002Fpytest.ini",{"path":128,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":129,"sourceHtmlUrl":130},"README.md",20627,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002FREADME.md",{"path":132,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":133,"sourceHtmlUrl":134},"references\u002Fgutenberg-blocks.md",14226,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002Freferences\u002Fgutenberg-blocks.md",{"path":136,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":137,"sourceHtmlUrl":138},"requirements-dev.txt",421,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002Frequirements-dev.txt",{"path":140,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":141,"sourceHtmlUrl":142},"requirements.txt",120,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002Frequirements.txt",{"path":144,"resourceType":145,"resourceTypeDesc":146,"sizeBytes":147,"sourceHtmlUrl":148},"scripts\u002Fcontent_to_gutenberg.py","SCRIPT","脚本",28387,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002Fscripts\u002Fcontent_to_gutenberg.py",{"path":150,"resourceType":145,"resourceTypeDesc":146,"sizeBytes":151,"sourceHtmlUrl":152},"scripts\u002Fwp_publisher.py",34529,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002Fscripts\u002Fwp_publisher.py",{"path":154,"resourceType":145,"resourceTypeDesc":146,"sizeBytes":155,"sourceHtmlUrl":156},"tests\u002F__init__.py",16,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002Ftests\u002F__init__.py",{"path":158,"resourceType":145,"resourceTypeDesc":146,"sizeBytes":159,"sourceHtmlUrl":160},"tests\u002Ftest_content_converter.py",14077,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002Ftests\u002Ftest_content_converter.py",{"path":162,"resourceType":145,"resourceTypeDesc":146,"sizeBytes":163,"sourceHtmlUrl":164},"tests\u002Ftest_wp_publisher.py",9234,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F内容创意\u002Fwordpress-publishing-skill-for-claude\u002Ftests\u002Ftest_wp_publisher.py",[166,190,221,232,242,272],{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":172,"publishedAt":54},"01M6Q5R6WZ06RRB9RQTW54B34B","zyfai","Earn yield on any Ethereum wallet on Base, Arbitrum, and Plasma. Use when a user wants passive DeFi yield on their funds. Deploys a non-custodial subaccount (Safe) linked to their EOA, enables automated yield optimization, and lets them deposit\u002Fwithdraw anytime.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzyfai-sdk\u002FSKILL.md",[],[168,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189],"safe","ethereum","defi","Optimization","user","use","Wallet","base","deposit","withdraw","yield","arbitrum","non-custodial","passive","defi yield","earn","yield optimization",{"skillNo":191,"name":192,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":204,"publishedAt":54},"01M6Q5R337B5JSNER4P4YS03TN","zerion-api","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api\u002FSKILL.md",[195,198,201],{"categoryNo":196,"categoryName":197,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":199,"categoryName":200,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":202,"categoryName":203,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000030","开发工程师",[47,205,206,207,208,209,210,175,211,179,212,213,214,215,216,217,218,219,220],"zerion api","zerion","MCP","mcp server","server","blockchain","transactions","crypto wallet","crypto","evm","solana","query","across","positions","token","prices",{"skillNo":222,"name":223,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":224,"categories":225,"keywords":229,"publishedAt":54},"01M6Q5QZFYTDAZMZ27BN5VZXAR","zerion-api-skill","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-skill\u002FSKILL.md",[226,227,228],{"categoryNo":196,"categoryName":197,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":199,"categoryName":200,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":202,"categoryName":203,"taxonomyType":28,"taxonomyTypeDesc":29},[47,230,231,205,206,207,208,209,210,175,211,179,213,214,215,216,217,218,219,220],"api skill","zerion api skill",{"skillNo":233,"name":234,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":235,"categories":236,"keywords":240,"publishedAt":54},"01M6Q5QW17QW98RA3FE45E4RD8","zerion-api-mcp","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-mcp\u002FSKILL.md",[237,238,239],{"categoryNo":196,"categoryName":197,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":199,"categoryName":200,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":202,"categoryName":203,"taxonomyType":28,"taxonomyTypeDesc":29},[207,47,241,205,206,208,209,175,211,179,212,213,214,215,216,217,218,219,220],"zerion api mcp",{"skillNo":243,"name":244,"nameZh":6,"description":245,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":246,"categories":247,"keywords":251,"publishedAt":54},"01M6Q5QQYZB7A501BDEQWKGSJT","yahoo-finance-forex","Fetches real-time FOREX news and market data from Yahoo Finance for major currency pairs (EUR\u002FUSD, GBP\u002FUSD, USD\u002FJPY, etc.). Analyzes sentiment and provides trading context.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-forex\u002FSKILL.md",[248],{"categoryNo":249,"categoryName":250,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000040","财务",[252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271],"finance","yahoo finance","forex","yahoo","yahoo finance forex","github","https","sentiment","real-time","python3","install","Market","usd","news","time","currency","gbp","pip","market data","for",{"skillNo":273,"name":274,"nameZh":6,"description":275,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":276,"categories":277,"keywords":279,"publishedAt":54},"01M6Q5QM6VS84WZVM7BKXXPF32","yahoo-finance","This skill should be used when the user asks to \"get stock prices\", \"check stock quotes\", \"look up earnings\", \"get financial data\", \"find trending stocks\", or needs stock market data from Yahoo Finance.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-cli\u002FSKILL.md",[278],{"categoryNo":249,"categoryName":250,"taxonomyType":28,"taxonomyTypeDesc":29},[252,253,255,280,281,282,283,284,285,263,286,287,288,289,290,291,292,293,220,270],"cli","homebrew","find","check","brew","up","local","get","stock","link","trending","sf","quotes","ln"]