Friday, August 7, 2026

Automate WordPress Publishing with n8n: Beginner Guide 2025

Over 43% of websites run on WordPress, yet most content teams still manually copy-paste posts between tools — wasting 6+ hours weekly per creator. n8n, the Berlin-based workflow automation platform founded in 2019 and now valued at $2.5 billion after its $180M Series C in October 2025, connects WordPress to 400+ apps via visual nodes without code. This guide shows exactly how to build your first automated publishing pipeline in under 30 minutes, using the WordPress REST API and n8n's HTTP Request node to trigger posts from Airtable, Google Sheets, or webhook calls — no plugins, no PHP, no server access required.

Quick Answer: Connect n8n to WordPress using the REST API with Application Passwords authentication. Create a workflow: trigger (webhook/schedule) → transform data (set title, content, categories) → HTTP Request node (POST to /wp-json/wp/v2/posts) → handle response. Test with a draft post first, then activate for production.

Why Automate WordPress Publishing with n8n

Eliminate Manual Bottlenecks

Content teams using spreadsheets for editorial calendars lose 12 hours monthly per person reformatting Markdown, uploading images, and setting SEO fields. n8n's visual editor maps spreadsheet columns directly to WordPress post fields — title, content, excerpt, featured image URL, categories, tags, Yoast SEO meta — in a single workflow. A marketing agency managing 15 client blogs reduced publishing time from 45 minutes to 3 minutes per post by routing Airtable records through n8n to WordPress.

Own Your Data and Logic

Unlike Zapier or Make, n8n runs self-hosted on your infrastructure (Docker, Kubernetes, or VPS) starting at $0/month for unlimited workflows. Your content never leaves your servers, critical for GDPR compliance and client confidentiality. The platform's 400+ native nodes include HTTP Request for any API, Function for custom JavaScript/Python, and Webhook for real-time triggers — giving you full control without vendor lock-in.

Scale Without Linear Cost Growth

Zapier charges $73.50/month for 10,000 tasks; n8n Cloud starts at €20/month for 10,000 executions, while self-hosted costs only server resources. One publisher automated 2,300 monthly posts across 8 sites using a single n8n instance on a $24/month DigitalOcean droplet. Workflows version-control in Git, enabling CI/CD for content pipelines — impossible with no-code SaaS alternatives.

Prerequisites: WordPress REST API Setup

Enable Application Passwords

WordPress 5.6+ includes Application Passwords natively. Go to Users → Profile → Application Passwords, name it "n8n-automation", copy the generated 24-character password (shown once). This scopes access to your user's capabilities — Editor role can publish, Author role creates drafts. No plugins needed. For older sites, install the "Application Passwords" plugin from WordPress.org (last updated 2024, 100k+ active installs).

Verify REST API Endpoints

Test with curl: curl -u "username:app_password" https://yoursite.com/wp-json/wp/v2/posts. Should return JSON array of posts. Key endpoints: POST /wp/v2/posts (create), POST /wp/v2/media (upload images), GET /wp/v2/categories (list taxonomies). The API respects user permissions — if your account can't publish, posts stay as drafts. Check https://yoursite.com/wp-json/ for namespace discovery.

Handle CORS and Rate Limits

Shared hosting often blocks REST API via mod_security. Add to .htaccess: <IfModule mod_security.c> SecFilterRemove 00318 </IfModule>. Rate limits vary: WP Engine allows 300 requests/minute, SiteGround 100/minute. n8n's built-in "Retry On Fail" (3 attempts, exponential backoff) and "Rate Limit" node (max 50/minute) prevent 429 errors. For high-volume sites, implement queue workflows with Redis or RabbitMQ.

Build Your First n8n → WordPress Workflow

Step 1: Create Trigger Node

  1. Open n8n editor, click "+" → Trigger → Webhook (for external calls) or Schedule (cron: "0 9 * * 1-5" for weekdays 9 AM).
  2. Webhook URL: https://your-n8n.com/webhook/wp-publish. Test with Postman: POST JSON {"title":"Test Post","content":"Body text","status":"draft"}.
  3. Add "Set" node after trigger to map fields: title, content (HTML), excerpt, status ("publish" or "draft"), categories (array of IDs), tags (array of IDs).

Step 2: Configure HTTP Request Node for Posts

  1. Add HTTP Request node. Method: POST. URL: https://yoursite.com/wp-json/wp/v2/posts.
  2. Authentication: Basic Auth → Username: your WP username, Password: Application Password.
  3. Headers: Content-Type: application/json. Body: JSON → {"title": "{{$json.title}}", "content": "{{$json.content}}", "excerpt": "{{$json.excerpt}}", "status": "{{$json.status}}", "categories": {{$json.categories}}, "tags": {{$json.tags}}}.
  4. Enable "Retry On Fail": 3 retries, 5s interval. Response: "Full Response" to capture post ID for next steps.

Step 3: Upload Featured Images (Optional)

  1. Add second HTTP Request node before post creation. Method: POST. URL: https://yoursite.com/wp-json/wp/v2/media.
  2. Headers: Content-Type: image/jpeg (or png/webp). Body: Binary → select "data" property from previous node (e.g., {{$binary.image.data}}).
  3. Capture response id (media ID). In post node, add "featured_media": {{$json.id}} to body JSON.
  4. Use "IF" node to skip if no image provided. Test with 500KB JPEG — WordPress max upload defaults to 256MB (adjust via php.ini).

Real-World Example: Airtable Editorial Calendar to WordPress

Data Structure in Airtable

Table "Posts" with fields: Title (single line), Content (long text, Markdown), Status (single select: Draft/Scheduled/Published), Category (linked to Categories table), Tags (multiple select), Featured Image (attachment), Scheduled Date (date/time), SEO Title (single line), Meta Description (long text). View "Ready to Publish" filters: Status = "Scheduled" AND Scheduled Date ≤ NOW().

n8n Workflow Architecture

  1. Schedule Trigger: Every 15 minutes (*/15 * * * *).
  2. Airtable Node: List records from "Ready to Publish" view. Returns array of records.
  3. Split In Batches: Process 1 record per execution (prevents timeout on large batches).
  4. Function Node: Convert Markdown to HTML using marked library: const marked = require('marked'); return [{json: {...item.json, content: marked.parse(item.json.Content)}}].
  5. HTTP Request: Create media (if attachment exists) → capture media ID.
  6. HTTP Request: Create post with title, HTML content, status "publish", categories, tags, featured_media, meta: {"_yoast_wpseo_title": "{{$json['SEO Title']}}", "_yoast_wpseo_metadesc": "{{$json['Meta Description']}}"}.
  7. Airtable Update: Set Status = "Published", add Post URL and Post ID to record.
  8. Slack Node: Notify #content channel with post link.

Results After 90 Days

Digital agency "ContentFlow" migrated 12 client sites. Before: 3.2 hours/week manual publishing. After: 0.4 hours/week monitoring. Zero failed posts in 2,700 executions. Editors now work entirely in Airtable — n8n handles formatting, scheduling, SEO fields, and cross-posting to LinkedIn/Twitter via additional HTTP Request nodes. Monthly server cost: $18 (Hetzner CX22).

n8n vs. Zapier vs. Make vs. Custom Code: Comparison

Choosing the right automation layer depends on volume, technical skill, and data sovereignty needs. Below compares four approaches for WordPress publishing at scale.

All tools connect to WordPress REST API, but differ in pricing model, extensibility, and operational overhead. Self-hosted n8n wins for high-volume, privacy-sensitive teams; Zapier suits low-volume non-technical users; Make balances visual logic with cost; custom code offers maximum control but highest maintenance.

Criteria n8n (Self-Hosted) Zapier Make (formerly Integromat) Custom Python/Node.js
Monthly Cost (10k executions) $0 (server only ~$20) $73.50 (Professional plan) $29 (Core plan) $0 (dev time ~40 hrs setup)
WordPress Nodes HTTP Request (full API control) WordPress app (limited actions) WordPress app (moderate coverage) Full REST API + GraphQL
Data Privacy On-premise, zero egress US cloud, SOC2 Type II EU cloud, GDPR compliant Full control
Visual Debugging Execution log + node data Task history (14-day retention) Execution log + data inspector Custom logging required
Version Control Export JSON → Git No (UI only) Export blueprint → Git Native Git
Learning Curve Medium (2-3 days) Low (hours) Medium (1-2 days) High (weeks)
Max Concurrent Executions Server dependent (100+) 100 (Professional) 40 (Core) Unlimited

Common Mistakes and How to Fix Them

Mistake 1: Hardcoding Credentials in Workflow JSON

Why It Hurts: Exported workflows commit Application Passwords to Git. Anyone with repo access gets full WordPress publishing rights. n8n Cloud had a 2023 incident where shared templates leaked credentials.

Fix: Use n8n's built-in Credentials system: Credentials → New → HTTP Basic Auth → store username/password encrypted. Reference in HTTP Request node via "Authentication" dropdown. For self-hosted, set N8N_ENCRYPTION_KEY env var — rotates encryption at rest.

Mistake 2: Ignoring Idempotency — Duplicate Posts on Retry

Why It Hurts: Network timeout after WordPress creates post but before n8n receives response triggers retry → second identical post. Seen in 12% of high-latency hosts (shared hosting >2s response).

Fix: Generate client-side UUID in "Set" node: {{$now.timestamp()}}-{{$randomString(8)}}. Add to post meta: "_n8n_client_id": "{{$json.client_id}}". Before create, HTTP Request GET /wp/v2/posts?meta_key=_n8n_client_id&meta_value={{$json.client_id}}. If exists, skip create.

Mistake 3: Sending Raw Markdown to WordPress Content Field

Why It Hurts: WordPress stores raw Markdown — frontend renders as plain text with visible asterisks/underscores. Editors see broken formatting; SEO plugins can't parse headings for schema.

Fix: Use n8n Function node with marked (npm) or markdown-it: const marked = require('marked'); items[0].json.content = marked.parse(items[0].json.content); return items;. For Gutenberg blocks, output block HTML:

Text

.

Mistake 4: No Dead Letter Queue for Failed Executions

Why It Hurts: Failed workflows silently disappear after retry exhaustion. Content team discovers missing posts days later. No audit trail for compliance.

Fix: Enable n8n "Error Workflow" (Settings → Workflows → Error Workflow). Create separate workflow: Webhook → Set (capture error, timestamp, input data) → Write to Google Sheets/PostgreSQL → Slack alert. Set main workflow's "Error Workflow" to this. Retains 100% failure visibility.

Pro Tips

  • Batch categorize via taxonomy cache: Schedule daily workflow: GET /wp/v2/categories?per_page=100 → store name→ID map in n8n static data or Redis. Avoids 50+ API calls per post.
  • Use webhook signatures for security: In WordPress, add add_action('rest_api_init', fn() => add_filter('rest_pre_dispatch', fn($res) => { if($_SERVER['HTTP_X_N8N_SIGNATURE'] !== hash_hmac('sha256', file_get_contents('php://input'), 'shared_secret')) return new WP_Error('forbidden', 'Invalid signature', 403); return $res; })); — validates n8n origin.
  • Parallelize with Split In Batches + Merge: For 50+ posts, Split In Batches (batch size 5) → HTTP Request (parallel) → Merge → Airtable Update. Cuts 50-post run from 12 minutes to 2 minutes.
  • Implement exponential backoff for rate limits: HTTP Request node → Retry On Fail: 5 retries, interval {{Math.pow(2, $runIndex) * 1000}}ms (2s, 4s, 8s, 16s, 32s). Respects Retry-After header automatically.
  • Version workflows with semantic tags: Export workflow JSON → Git tag wp-publish-v1.2.0. Rollback: import previous JSON. Enables "what changed" diffs for compliance audits.

FAQ

What is the WordPress REST API and why does n8n use it?

The WordPress REST API (introduced in WordPress 4.7, December 2016) exposes content endpoints at /wp-json/wp/v2/ allowing external apps to create, read, update, delete posts, pages, media, and taxonomies via standard HTTP requests. n8n uses it because it's built into WordPress core — no plugins required — and supports authentication via Application Passwords, making it the most reliable programmatic interface for automation.

How does n8n compare to Zapier for WordPress automation?

n8n self-hosted costs $0/month for unlimited executions versus Zapier's $73.50/month for 10,000 tasks. n8n's HTTP Request node accesses the full WordPress REST API (custom fields, Gutenberg blocks, WooCommerce orders) while Zapier's WordPress app covers only 8 actions. n8n keeps data on your infrastructure; Zapier processes data on US servers. Zapier wins for non-technical users needing 50+ pre-built app integrations without server management.

Can I automate WooCommerce product publishing with n8n?

Yes. WooCommerce extends the REST API with /wp-json/wc/v3/products endpoints. Use n8n HTTP Request with Basic Auth (Consumer Key/Secret from WooCommerce → Settings → Advanced → REST API). Map Airtable fields to product properties: name, description, regular_price, categories (array of IDs), images (array of src URLs), attributes, meta_data. Test with status "draft" first — WooCommerce validates required fields strictly.

Why do my automated posts appear as "Draft" instead of "Published"?

The WordPress REST API respects user capabilities. If the Application Password belongs to an "Author" role user, status: "publish" is ignored — WordPress forces "draft". Fix: assign "Editor" or "Administrator" role to the automation user, or use a plugin like "Publish Press Capabilities" to grant publish_posts to Author. Verify with curl -u "user:pass" -X POST -H "Content-Type: application/json" -d '{"title":"Test","status":"publish"}' https://site.com/wp-json/wp/v2/posts — response shows actual status.

What happens when n8n adds AI content generation to WordPress workflows?

n8n 1.0 (March 2024) added native LangChain nodes: OpenAI, Anthropic, Ollama (local LLMs). You can now insert "OpenAI" node before WordPress HTTP Request: prompt "Write 800-word SEO article about {{$json.topic}}. Include H2s, bullet points, FAQ schema. Return HTML." → output feeds directly into post content. Combined with vector databases (Pinecone, Qdrant nodes), enables RAG-powered content at scale — all within n8n's visual editor, no custom code.

Conclusion

Automating WordPress publishing with n8n transforms content operations from manual bottlenecks into scalable, auditable pipelines. The combination of WordPress REST API (native since 2016), Application Passwords (since 5.6), and n8n's visual HTTP Request node gives you enterprise-grade automation at a fraction of SaaS costs — $0 self-hosted versus $73.50/month on Zapier for equivalent volume. Start with a single webhook-triggered draft post today, then layer on Airtable editorial calendars, AI content generation, multi-platform syndication, and dead-letter queues. Your editorial team will reclaim 12+ hours monthly; your infrastructure stays yours.

  • WordPress REST API + n8n HTTP Request node = zero-plugin automation foundation
  • Application Passwords provide scoped, revocable credentials — never share admin passwords
  • Idempotency keys prevent duplicate posts; error workflows capture 100% of failures
  • Self-hosted n8n on $20/month server handles 10,000+ monthly posts with full data sovereignty

Sources

Share:

0 comments:

Post a Comment