# Send WordPress Publisher Skill to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "wordpress-publishing-skill-for-claude",
    "name": "WordPress Publisher Skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Asif2BD/wordpress-publishing-skill-for-claude",
    "canonicalUrl": "https://clawhub.ai/Asif2BD/wordpress-publishing-skill-for-claude",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/wordpress-publishing-skill-for-claude",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=wordpress-publishing-skill-for-claude",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      ".claude-plugin/marketplace.json",
      ".claude-plugin/plugin.json",
      ".github/ISSUE_TEMPLATE/bug_report.md",
      ".github/ISSUE_TEMPLATE/feature_request.md",
      ".github/PULL_REQUEST_TEMPLATE.md",
      ".github/workflows/ci.yml"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/wordpress-publishing-skill-for-claude"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/wordpress-publishing-skill-for-claude",
    "downloadUrl": "https://openagent3.xyz/downloads/wordpress-publishing-skill-for-claude",
    "agentUrl": "https://openagent3.xyz/skills/wordpress-publishing-skill-for-claude/agent",
    "manifestUrl": "https://openagent3.xyz/skills/wordpress-publishing-skill-for-claude/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/wordpress-publishing-skill-for-claude/agent.md"
  }
}
```
## Documentation

### WordPress Publisher

Publish content directly to WordPress sites using the REST API with full Gutenberg block formatting, automatic category selection, SEO tag generation, and preview capabilities.

### Complete Workflow Overview

1. CONNECT    → Authenticate with WordPress site
2. ANALYZE    → Load categories from site, analyze content for best match
3. GENERATE   → Create SEO-optimized tags based on content
4. CONVERT    → Transform markdown/HTML to Gutenberg blocks
5. PREVIEW    → Create draft and verify rendering
6. PUBLISH    → Publish or schedule the post
7. VERIFY     → Confirm live post renders correctly

### Get Credentials

Ask user for:

WordPress site URL (e.g., https://example.com)
WordPress username
Application password (NOT regular password)

### How to Create Application Password

Guide user:

Go to Users → Profile in WordPress admin
Scroll to Application Passwords section
Enter name: Claude Publisher
Click Add New Application Password
Copy the generated password (shown only once, with spaces)

### Test Connection

from scripts.wp_publisher import WordPressPublisher

wp = WordPressPublisher(
    site_url="https://example.com",
    username="admin",
    password="xxxx xxxx xxxx xxxx xxxx xxxx"  # Application password
)

# Test connection
user_info = wp.test_connection()
print(f"Connected as: {user_info['name']}")

### Auto-Load Categories from Site

# Get all categories from the WordPress site
categories = wp.get_categories_with_details()

# Returns list like:
# [
#   {'id': 1, 'name': 'Uncategorized', 'slug': 'uncategorized', 'count': 5},
#   {'id': 2, 'name': 'Tutorials', 'slug': 'tutorials', 'count': 12},
#   {'id': 3, 'name': 'Cloud Hosting', 'slug': 'cloud-hosting', 'count': 8},
# ]

### Smart Category Selection

The system analyzes content and selects the most appropriate category:

# Analyze content and suggest best category
suggested_category = wp.suggest_category(
    content=article_content,
    title=article_title,
    available_categories=categories
)

# Or let user choose from available options
print("Available categories:")
for cat in categories:
    print(f"  [{cat['id']}] {cat['name']} ({cat['count']} posts)")

### Category Selection Logic

Exact match - Title/content contains category name
Keyword match - Category slug matches topic keywords
Parent category - Fall back to broader parent if no match
Create new - Create category if none fit (with user approval)

### Automatic Tag Generation

Generate tags that improve Google search visibility:

# Generate tags based on content analysis
tags = wp.generate_seo_tags(
    content=article_content,
    title=article_title,
    max_tags=10
)

# Returns list like:
# ['n8n hosting', 'workflow automation', 'self-hosted n8n', 
#  'affordable hosting', 'docker deployment', 'node.js hosting']

### Tag Generation Rules

Primary keyword - Always include as first tag
Secondary keywords - Include 2-3 related terms
Long-tail keywords - Include 3-4 specific phrases
Entity tags - Include product/brand names mentioned
Topic tags - Include broader category terms

### Create/Get Tags in WordPress

# Get or create all tags, returns list of tag IDs
tag_ids = wp.get_or_create_tags(tags)

### Markdown to Gutenberg

from scripts.content_to_gutenberg import convert_to_gutenberg

# Convert markdown content
gutenberg_content = convert_to_gutenberg(markdown_content)

### Supported Conversions

MarkdownGutenberg Block# Headingwp:heading**bold**<strong> in paragraph- list itemwp:list1. orderedwp:list {"ordered":true}\\\`\`code\`\`\`\`wp:code> quotewp:quote![alt](url)wp:image| table |wp:table

### Table Conversion (Critical for AI Content)

Tables are converted with proper Gutenberg structure:

# Input markdown:
| Feature | Plan A | Plan B |
|---------|--------|--------|
| Price   | $10    | $20    |

# Output Gutenberg:
<!-- wp:table -->
<figure class="wp-block-table"><table>
  <thead><tr><th>Feature</th><th>Plan A</th><th>Plan B</th></tr></thead>
  <tbody><tr><td>Price</td><td>$10</td><td>$20</td></tr></tbody>
</table></figure>
<!-- /wp:table -->

### Create Draft for Preview

# Create as draft first
result = wp.create_draft(
    title="Article Title",
    content=gutenberg_content,
    categories=[category_id],
    tags=tag_ids,
    excerpt="Auto-generated or custom excerpt"
)

post_id = result['post_id']
preview_url = result['preview_url']
edit_url = result['edit_url']

### Verify Preview

# Fetch preview page to verify rendering
preview_content = wp.fetch_preview(post_id)

# Check for issues
issues = wp.validate_rendered_content(preview_content)
if issues:
    print("Issues found:")
    for issue in issues:
        print(f"  - {issue}")

### Preview Checklist

Title displays correctly
 All headings render (H2, H3, H4)
 Tables render with proper formatting
 Lists display correctly (bullet and numbered)
 Code blocks have syntax highlighting
 Images load (if any)
 Links are clickable
 Category shows correctly
 Tags display in post

### Publish Draft

# After preview approval, publish
result = wp.publish_post(post_id)
live_url = result['live_url']

### Or Create and Publish Directly

# Full publish workflow in one call
result = wp.publish_content(
    title="Article Title",
    content=gutenberg_content,
    category_names=["Cloud Hosting"],  # By name, auto-resolves to ID
    tag_names=["n8n", "hosting", "automation"],
    status="publish",  # or "draft", "pending", "private", "future"
    excerpt="Custom excerpt for SEO",
    slug="custom-url-slug"
)

### Scheduling Posts

# Schedule for future publication
from datetime import datetime, timedelta

publish_date = datetime.now() + timedelta(days=1)
result = wp.publish_content(
    title="Scheduled Post",
    content=content,
    status="future",
    date=publish_date.isoformat()
)

### Check Live Post

# Verify the published post
verification = wp.verify_published_post(post_id)

print(f"Live URL: {verification['url']}")
print(f"Status: {verification['status']}")
print(f"Categories: {verification['categories']}")
print(f"Tags: {verification['tags']}")

### Common Issues and Fixes

IssueCauseSolutionTables not renderingMissing figure wrapperUse proper wp:table block structureCode not highlightedMissing language attributeAdd {"language":"python"} to code blockImages brokenWrong URL or missing mediaUpload to WordPress first, use media IDTags not showingTheme doesn't display tagsCheck theme settings or use different theme

### Complete Example Workflow

from scripts.wp_publisher import WordPressPublisher
from scripts.content_to_gutenberg import convert_to_gutenberg

# 1. Connect
wp = WordPressPublisher(
    site_url="https://xcloud.host",
    username="admin",
    password="xxxx xxxx xxxx xxxx"
)

# 2. Load categories and select best match
categories = wp.get_categories_with_details()
best_category = wp.suggest_category(content, title, categories)

# 3. Generate SEO tags
tags = wp.generate_seo_tags(content, title, max_tags=10)

# 4. Convert to Gutenberg
gutenberg_content = convert_to_gutenberg(markdown_content)

# 5. Create draft and preview
draft = wp.create_draft(
    title="7 Best n8n Hosting Providers in 2026",
    content=gutenberg_content,
    categories=[best_category['id']],
    tags=wp.get_or_create_tags(tags)
)
print(f"Preview: {draft['preview_url']}")

# 6. After verification, publish
result = wp.publish_post(draft['post_id'])
print(f"Published: {result['live_url']}")

### API Endpoints

ResourceEndpointPosts/wp-json/wp/v2/postsPages/wp-json/wp/v2/pagesCategories/wp-json/wp/v2/categoriesTags/wp-json/wp/v2/tagsMedia/wp-json/wp/v2/media

### Post Statuses

StatusDescriptionpublishLive and visibledraftSaved but not visiblependingAwaiting reviewprivateOnly visible to adminsfutureScheduled for later

### Required Files

scripts/wp_publisher.py - Main publisher class
scripts/content_to_gutenberg.py - Markdown/HTML converter
references/gutenberg-blocks.md - Block format reference

### Error Handling

Error CodeMeaningSolution401Invalid credentialsCheck username and application password403Insufficient permissionsUser needs Editor or Admin role404Endpoint not foundVerify REST API is enabled400Invalid dataCheck category/tag IDs exist500Server errorRetry or check WordPress error logs

### Best Practices

Always preview first - Create as draft, verify, then publish
Use application passwords - Never use regular WordPress password
Select appropriate category - Helps with site organization and SEO
Generate relevant tags - Improves Google discoverability
Validate Gutenberg blocks - Ensure proper block structure
Keep excerpts under 160 chars - Optimal for search snippets
Use descriptive slugs - Include primary keyword in URL
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: Asif2BD
- Version: 0.1.0
## Source health
- Status: healthy
- Source download looks usable.
- Yavira can redirect you to the upstream package for this source.
- Health scope: source
- Reason: direct_download_ok
- Checked at: 2026-05-07T17:22:31.273Z
- Expires at: 2026-05-14T17:22:31.273Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/wordpress-publishing-skill-for-claude)
- [Send to Agent page](https://openagent3.xyz/skills/wordpress-publishing-skill-for-claude/agent)
- [JSON manifest](https://openagent3.xyz/skills/wordpress-publishing-skill-for-claude/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/wordpress-publishing-skill-for-claude/agent.md)
- [Download page](https://openagent3.xyz/downloads/wordpress-publishing-skill-for-claude)