Workflow: Use XMLRPC via HttpRequest-node to post on Wordpress.com
Integrations: code, httpRequest, if, manualTrigger, noOp, set, stickyNote, xml

{"id": "yPIST7l13huQEjY5", "meta": {"instanceId": "workflow-83e69afb", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:43.937110", "updatedAt": "2025-09-29T07:07:43.937116", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Use XMLRPC via HttpRequest-node to post on Wordpress.com", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "8a64ffca-804a-4793-a721-3cb670aec22f", "name": "Settings", "type": "n8n-nodes-base.set", "position": [-380, -700], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "1be018c7-51fe-4ea2-967d-ce47a2e8795c", "name": "wordpressUrl", "type": "string", "value": "YOURBLOG.wordpress.com"}, {"id": "95377f4f-184b-46a7-94c7-b2313c314cb2", "name": "wordpressUsername", "type": "string", "value": "YourUserName"}, {"id": "fdc99dc6-d9b0-4d2f-b770-1d8b6b360cad", "name": "wordpressApplicationPassword", "type": "string", "value": "your 4app pass word"}, {"id": "5aee5eef-9ad2-4dfb-a63f-1b5228c47e31", "name": "contentTitle", "type": "string", "value": "This is a demo title"}, {"id": "2abf516c-2910-4cd0-89fe-119cd0e616c8", "name": "contentText", "type": "string", "value": "This is the main text."}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "157b9656-5d90-44f4-aa3c-1285cda698d8", "name": "ManualTrigger", "type": "n8n-nodes-base.manualTrigger", "position": [-580, -700], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "1d2f6916-e5bd-497b-9843-8bb5a48e9866", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-420, -820], "parameters": {"width": 180, "height": 360, "content": "## Settings"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "1306446a-f628-44ba-9ca5-751b634bd5dd", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [140, -820], "parameters": {"color": 5, "width": 720, "height": 360, "content": "## Response Handling"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "ec3006aa-34c8-4522-8c37-980f68f168b5", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [-220, -820], "parameters": {"color": 3, "width": 340, "height": 360, "content": "## Request Sending"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "bc918075-bea5-4a27-90d9-874b0917a958", "name": "Success", "type": "n8n-nodes-base.noOp", "position": [660, -780], "parameters": {}, "typeVersion": 1, "notes": "This noOp node performs automated tasks as part of the workflow."}, {"id": "3ea541b7-080e-4694-b865-d7d04f69ea0c", "name": "Error", "type": "n8n-nodes-base.noOp", "position": [660, -620], "parameters": {}, "typeVersion": 1, "notes": "This noOp node performs automated tasks as part of the workflow."}, {"id": "457c0687-ac1d-49e2-b434-6e1de9acb3a3", "name": "PrepareXML", "type": "n8n-nodes-base.code", "notes": "(request payload, escaping)", "position": [-180, -700], "parameters": {"mode": "runOnceForEachItem", "jsCode": "const input = $json; // If other nodes are in between: $('Settings').item.json;\n\nconst username = input.wordpressUsername;\nconst password = input.wordpressApplicationPassword;\nconst title = input.contentTitle;\nconst text = input.contentText;\n\nconst blogId = 0;\nconst published = 1; // 0 = draft, 1 = published\n\n\n// Helper function to escape XML special characters\nfunction escapeXml(unsafe) {\n  return unsafe.replace(/[<>&'\"]/g, (c) => {\n    switch (c) {\n      case '<': return '&lt;';\n      case '>': return '&gt;';\n      case '&': return '&amp;';\n      case '\\'': return '&apos;';\n      case '\"': return '&quot;';\n      default: return c;\n    }\n  });\n}\n\n// Your actual post text, which may contain characters needing escaping\nconst titleEscaped = escapeXml(title);\nconst textEscaped = escapeXml(text);\n\n// Build the XML payload\nconst xmlData = `<?xml version=\"1.0\"?>\n<methodCall>\n  <methodName>wp.newPost</methodName>\n  <params>\n    <param>\n      <value><string>${blogId}</string></value>\n    </param>\n    <param>\n      <value><string>${username}</string></value>\n    </param>\n    <param>\n      <value><string>${password}</string></value>\n    </param>\n    <param>\n      <value>\n        <struct>\n          <member>\n            <name>post_title</name>\n            <value><string>${titleEscaped}</string></value>\n          </member>\n          <member>\n            <name>post_content</name>\n            <value><string>${textEscaped}</string></value>\n          </member>\n        </struct>\n      </value>\n    </param>\n    <param>\n      <value><boolean>${published}</boolean></value>\n    </param>\n  </params>\n</methodCall>`;\n\n\n// Add a new field called 'myNewField' to the JSON of the item\n$input.item.json.xmlRequestBody = xmlData;\n\nreturn $input.item;"}, "notesInFlow": true, "typeVersion": 2}, {"id": "3f29f3ed-f7ae-475b-bce3-04d3eeeacee9", "name": "PostRequest", "type": "n8n-nodes-base.httpRequest", "position": [-20, -700], "parameters": {"url": "{{ $env.BASE_URL }}", "body": "={{ $json.xmlRequestBody }}", "method": "POST", "options": {}, "sendBody": true, "contentType": "raw", "sendHeaders": true, "rawContentType": "text/xml", "headerParameters": {"parameters": [{"name": "Content-Type", "value": "text/xml"}]}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "5f320d9b-8aa9-4d13-83db-86acaf444e92", "name": "IsSuccessful", "type": "n8n-nodes-base.if", "position": [420, -700], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "loose"}, "combinator": "and", "conditions": [{"id": "815d85a1-8f91-4338-977f-503f02c53ea2", "operator": {"type": "string", "operation": "exists", "singleValue": true}, "leftValue": "={{ $json.methodResponse.params.param.value }}", "rightValue": ""}]}, "looseTypeValidation": true}, "typeVersion": 2.2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "3a37d19a-12d3-474b-840f-c09342eecca9", "name": "HandleResponse", "type": "n8n-nodes-base.xml", "position": [220, -700], "parameters": {"options": {}}, "typeVersion": 1, "notes": "This xml node performs automated tasks as part of the workflow."}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "78f90dc5-6209-4db0-b6c6-9f2324488605", "connections": {"3f29f3ed-f7ae-475b-bce3-04d3eeeacee9": {"main": [[{"node": "error-handler-3f29f3ed-f7ae-475b-bce3-04d3eeeacee9", "type": "main", "index": 0}], [{"node": "error-handler-3f29f3ed-f7ae-475b-bce3-04d3eeeacee9-a561b73f", "type": "main", "index": 0}], [{"node": "error-handler-3f29f3ed-f7ae-475b-bce3-04d3eeeacee9-edb969bb", "type": "main", "index": 0}], [{"node": "error-handler-3f29f3ed-f7ae-475b-bce3-04d3eeeacee9-c2eeb9ed", "type": "main", "index": 0}], [{"node": "error-handler-3f29f3ed-f7ae-475b-bce3-04d3eeeacee9-f33f7eea", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Use XMLRPC via HttpRequest-node to post on Wordpress.com. This workflow integrates 9 different services: stickyNote, httpRequest, code, set, stopAndError. It contains 13 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Use XMLRPC via HttpRequest-node to post on Wordpress.com. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}