Zum Inhalt springen

Tutorials

n8n Workflow WordPress Draft → Bild-Briefing (Google Doc)

June 15, 2026 · Giomav2005

Workflow-Name: WordPress Draft → Bild-Briefing


1. Kurzüberblick

Dieser Workflow holt automatisch den neuesten WordPress-Entwurf (Draft), liest den Artikel-Inhalt, lässt eine KI (OpenAI) daraus ein Bild-Briefing erstellen und speichert alles in einem Google Doc.

Merksatz: WordPress-Draft → Text bereinigen → KI erstellt Bildprompt → Google Doc speichern.


2. Was macht dieser Workflow?

In einfachen Worten

Du klickst auf „Execute workflow“. Der Workflow holt deinen neuesten WordPress-Entwurf, bereitet den Text auf, schickt ihn an OpenAI und bekommt zurück: Bildprompt (für ElevenLabs), Negative Prompt, Alt-Text, Titel, Beschreibung und Caption. All das wird in ein neues Google Doc geschrieben.

Welches Problem löst er?

Blog-Autoren brauchen oft ein Featured Image (Beitragsbild). Dafür muss man einen guten Bildprompt schreiben, Alt-Text und Caption formulieren und alles dokumentieren. Der Workflow übernimmt diese Arbeit automatisch.

Für wen ist er nützlich?

  • Blog-Autoren mit WordPress
  • Content-Teams, die Bild-Briefings brauchen
  • SEO-Leute, die Alt-Texte brauchen
  • Alle, die Bildprompts für ElevenLabs Image Creation nutzen

3. Ablauf als einfache Prozesskette

Manueller Start
    ↓
WordPress: Neuesten Draft holen (1 Stück)
    ↓
Code: HTML entfernen, sauberen Text extrahieren
    ↓
OpenAI: Bild-Briefing als JSON erstellen
    ↓
Code: JSON auslesen, Dokument-Text formatieren
    ↓
Google Docs: Leeres Dokument anlegen
    ↓
Google Docs: Inhalt einfügen
    ↓
Fertig: Google Doc mit Bild-Briefing

Es gibt keine Verzweigungen. Alle 7 Nodes laufen nacheinander in einer geraden Linie.


4. Analyse der einzelnen Nodes

Node 1: When clicking ‘Execute workflow’

EigenschaftWert
TypManual Trigger
ZweckStartet den Workflow per Klick

Daten rein: Keine. Daten raus: Start-Signal.

Wenn weggelassen: Der Workflow startet nicht (außer du ersetzt ihn durch einen anderen Trigger).


Node 2: Get many posts

EigenschaftWert
TypWordPress
ZweckHolt WordPress-Beiträge über die REST-API

Wichtige Einstellungen:

Operation:  getAll
Limit:      1
Order:      desc
Order By:   date
Status:     draft

Credentials: WordPress API (WordPress account).

Daten raus (Beispiel):

{
  "id": 123,
  "title": { "rendered": "Mein Artikel-Titel" },
  "content": { "rendered": "<p>HTML-Inhalt...</p>" },
  "excerpt": { "rendered": "<p>Kurztext...</p>" },
  "slug": "mein-artikel-titel",
  "link": "https://deine-site.de/?p=123"
}

Wenn falsch eingestellt: Kein Draft gefunden, falsche Posts, oder zu hohe OpenAI-Kosten.


Node 3: Code in JavaScript

EigenschaftWert
TypCode (JavaScript)
ZweckWordPress-HTML in lesbaren Text umwandeln

Vollständiger Code:

const html = $json.content?.rendered || '';

const cleanText = html
  .replace(/<script[\s\S]*?<\/script>/gi, '')
  .replace(/<style[\s\S]*?<\/style>/gi, '')
  .replace(/<[^>]+>/g, ' ')
  .replace(/\s+/g, ' ')
  .trim();

return [
  {
    json: {
      post_id: $json.id,
      title: $json.title?.rendered || '',
      slug: $json.slug || '',
      excerpt: ($json.excerpt?.rendered || '').replace(/<[^>]+>/g, ' ').trim(),
      article_text: cleanText,
      link: $json.link || '',
    },
  },
];

Daten raus (Beispiel):

{
  "post_id": 123,
  "title": "Mein Artikel-Titel",
  "slug": "mein-artikel-titel",
  "excerpt": "Kurztext ohne HTML",
  "article_text": "Volltext ohne HTML und ohne Scripts",
  "link": "https://deine-site.de/?p=123"
}

Warum hier? KI versteht Plain Text besser als HTML.


Node 4: Message a model

EigenschaftWert
TypOpenAI (LangChain)
Modellgpt-4.1-mini
ZweckKI erstellt Bild-Briefing aus Artikel-Inhalt

System Message:

Du antwortest immer ausschließlich mit gültigem JSON. Kein Markdown, keine Erklärung, kein Text außerhalb des JSON.

User Message (Expression-Modus mit = aktivieren):

Du bist ein SEO- und Creative-Assistant für WordPress-Blogartikel.

Analysiere den folgenden WordPress-Draft und erstelle ein Bildkonzept für ein Featured Image.

Erstelle:
- einen Bildprompt für ElevenLabs Image Creation auf Englisch
- einen Negative Prompt auf Englisch
- einen Alt Text auf Deutsch
- einen Bildtitel auf Deutsch
- eine Bildbeschreibung auf Deutsch
- eine Caption auf Deutsch

Regeln:
- Das Bild soll professionell, modern und hochwertig wirken.
- Es soll als Blog-Featured-Image funktionieren.
- Kein lesbarer Text im Bild.
- Keine Logos.
- Keine Wasserzeichen.
- Keine echten Markenoberflächen, wenn nicht nötig.
- Alt Text maximal 125 Zeichen.
- Antworte ausschließlich als gültiges JSON.

Artikel-Titel:
{{ $json.title }}

Artikel-Auszug:
{{ $json.excerpt }}

Artikel-Inhalt:
{{ $json.article_text }}

JSON-Format:

{
  "image_prompt": "",
  "negative_prompt": "",
  "alt_text": "",
  "image_title": "",
  "image_description": "",
  "caption": "",
  "recommended_style": "",
  "recommended_aspect_ratio": "16:9"
}

Erwartete KI-Antwort (Beispiel):

{
  "image_prompt": "Modern minimalist home office with laptop, soft natural light, professional blog header style",
  "negative_prompt": "text, logo, watermark, blurry, low quality",
  "alt_text": "Modernes Homeoffice mit Laptop und Tageslicht",
  "image_title": "Homeoffice Featured Image",
  "image_description": "Ein professionelles Bild für einen Blogartikel über Homeoffice.",
  "caption": "Produktives Arbeiten von zu Hause aus.",
  "recommended_style": "modern, clean, professional",
  "recommended_aspect_ratio": "16:9"
}

Node 5: Code in JavaScript1

EigenschaftWert
TypCode (JavaScript)
ZweckOpenAI-Antwort parsen und für Google Docs formatieren

Vollständiger Code:

const raw =
  $json.output?.[0]?.content?.[0]?.text ||
  $json["0"]?.content?.[0]?.text ||
  $json.text ||
  $json.message ||
  $json.content ||
  '';

if (!raw) {
  throw new Error('Kein OpenAI Text Output gefunden.');
}

let parsed;

try {
  parsed = JSON.parse(raw);
} catch (error) {
  throw new Error('AI output is not valid JSON: ' + raw);
}

const safeTitle =
  parsed.image_title ||
  'WordPress Bild-Briefing';

const documentText = `
Bild-Briefing für WordPress Featured Image

========================================

Bildtitel:
${parsed.image_title || ''}

========================================

ElevenLabs Image Prompt:

${parsed.image_prompt || ''}

========================================

Negative Prompt:

${parsed.negative_prompt || ''}

========================================

Alt Text:

${parsed.alt_text || ''}

========================================

Bildbeschreibung:

${parsed.image_description || ''}

========================================

Caption:

${parsed.caption || ''}

========================================

Empfohlener Stil:

${parsed.recommended_style || ''}

========================================

Empfohlenes Seitenverhältnis:

${parsed.recommended_aspect_ratio || '16:9'}
`;

return [
  {
    json: {
      ...parsed,
      document_title: `Bild-Briefing - ${safeTitle}`,
      document_text: documentText.trim(),
    },
  },
];

Daten raus (Beispiel):

{
  "image_prompt": "...",
  "negative_prompt": "...",
  "alt_text": "...",
  "image_title": "...",
  "image_description": "...",
  "caption": "...",
  "recommended_style": "...",
  "recommended_aspect_ratio": "16:9",
  "document_title": "Bild-Briefing - Homeoffice Featured Image",
  "document_text": "Bild-Briefing für WordPress Featured Image\n\n..."
}

Node 6: Create a document

EigenschaftWert
TypGoogle Docs
ZweckLeeres Google Doc anlegen

Wichtige Einstellungen:

Drive ID:   myDrive
Folder ID:  (leer = Root-Ordner)
Title:      ={{ $json.document_title }}

Daten raus (Beispiel):

{
  "id": "1a2b3c4d5e6f7g8h9i0j",
  "title": "Bild-Briefing - Homeoffice Featured Image"
}

Node 7: Update a document

EigenschaftWert
TypGoogle Docs
ZweckText in das gerade erstellte Dokument einfügen

Wichtige Einstellungen:

Operation:     update
Document URL:  ={{ $('Create a document').item.json.id }}
Action:        insert
Text:          ={{ $('Code in JavaScript1').item.json.document_text }}

Warum $('Node-Name')? Die Update-Node braucht die Doc-ID aus „Create a document“ und den Text aus „Code in JavaScript1“ – nicht nur die direkt vorherige Node.


5. Schritt-für-Schritt-Anleitung zum Nachbauen

Schritt 1: Trigger erstellen

  1. + klicken → Manual Trigger hinzufügen
  2. Name: When clicking 'Execute workflow'
  3. Mit der nächsten Node verbinden

Schritt 2: WordPress-Post abrufen

  1. +WordPress hinzufügen
  2. Name: Get many posts
  3. WordPress-Credentials einrichten
  4. Diese Werte eintragen:
Resource:   Post
Operation:  Get Many
Limit:      1
Status:     draft
Order By:   date
Order:      desc
  1. Mit Schritt 3 verbinden

Schritt 3: HTML bereinigen

  1. +CodeJavaScript
  2. Name: Code in JavaScript
  3. Mode: Run Once for All Items
  4. Den Code aus Abschnitt 4 (Node 3) einfügen
  5. Mit Schritt 4 verbinden

Schritt 4: OpenAI – Bild-Briefing erstellen

  1. +OpenAIMessage a model
  2. Name: Message a model
  3. OpenAI-Credentials einrichten
  4. Modell: gpt-4.1-mini
  5. System Message und User Message aus Abschnitt 4 (Node 4) einfügen
  6. Mit Schritt 5 verbinden

Schritt 5: OpenAI-Antwort verarbeiten

  1. +CodeJavaScript
  2. Name: Code in JavaScript1
  3. Den Code aus Abschnitt 4 (Node 5) einfügen
  4. Mit Schritt 6 verbinden

Schritt 6: Google Doc anlegen

  1. +Google Docs
  2. Name: Create a document
  3. Google OAuth verbinden
  4. Title-Feld als Expression setzen:
={{ $json.document_title }}
  1. Mit Schritt 7 verbinden

Schritt 7: Google Doc befüllen

  1. +Google Docs
  2. Name: Update a document
  3. Operation: Update
  4. Diese Expressions eintragen:
Document URL:
={{ $('Create a document').item.json.id }}

Text:
={{ $('Code in JavaScript1').item.json.document_text }}

Schritt 8: Testen

  1. Mindestens einen WordPress-Entwurf anlegen
  2. Execute workflow klicken
  3. Alle Nodes müssen grün werden
  4. Google Doc prüfen

6. Erklärung der Expressions und Variablen

Artikel-Daten im OpenAI-Prompt

{{ $json.title }}
{{ $json.excerpt }}
{{ $json.article_text }}
ExpressionWoherWofür
{{ $json.title }}Code Node 1Artikel-Titel an die KI
{{ $json.excerpt }}Code Node 1Kurztext an die KI
{{ $json.article_text }}Code Node 1Volltext an die KI

Einfach gesagt: Nimm Titel, Auszug und Text aus dem aktuellen Datensatz.

Beispiel-Eingabe:

{
  "title": "10 Tipps für besseres SEO",
  "excerpt": "So verbesserst du dein Ranking...",
  "article_text": "SEO ist wichtig, weil..."
}

Dokument-Titel in Google Docs

={{ $json.document_title }}

Einfach gesagt: Benenne das Google Doc wie der Code es vorgibt.

Beispiel-Ausgabe:

Bild-Briefing - Modernes Homeoffice mit Laptop

Doc-ID aus der Create-Node

={{ $('Create a document').item.json.id }}

Einfach gesagt: Greife auf die ID des gerade erstellten Google Docs zu.

Beispiel:

1a2b3c4d5e6f7g8h9i0j

Dokument-Text aus der zweiten Code-Node

={{ $('Code in JavaScript1').item.json.document_text }}

Einfach gesagt: Füge den formatierten Briefing-Text ein, den Code in JavaScript1 gebaut hat.


WordPress HTML im ersten Code-Block

$json.content?.rendered

Einfach gesagt: Nimm den HTML-Inhalt des WordPress-Posts – aber nur, wenn er existiert.


OpenAI-Antwort im zweiten Code-Block

$json.output?.[0]?.content?.[0]?.text

Einfach gesagt: Suche den KI-Text an verschiedenen möglichen Stellen in der n8n-Antwort.


7. Warum wurde der Workflow so aufgebaut?

Datenfluss von Schritt zu Schritt

Trigger:        (leer)
WordPress:      id, title, content, excerpt, slug, link
Code 1:         post_id, title, slug, excerpt, article_text, link
OpenAI:         JSON-String mit Bild-Feldern
Code 2:         parsed Felder + document_title + document_text
Create Doc:     Google Doc id + Metadaten
Update Doc:     Befülltes Dokument

Die Idee hinter der Reihenfolge

  1. Trigger – kontrollierter Start
  2. WordPress – nur 1 Draft = fokussiert und günstig
  3. Code 1 – Datenvorbereitung für die KI
  4. OpenAI – intelligente Bild-Idee
  5. Code 2 – Antwort strukturieren
  6. Google Create + Update – Dokument anlegen und befüllen

Mögliche Fehler und Vermeidung

RisikoVermeidung
Kein DraftVor dem Test Entwurf anlegen
Kein gültiges JSON von OpenAISystem-Prompt verschärfen
Google OAuth abgelaufenCredentials neu verbinden
Sehr langer Artikelarticle_text ggf. kürzen

8. Typische Fehler und Lösungen

FehlerUrsacheLösung
Workflow startet nichtKein TriggerManual Trigger setzen
Keine WordPress-DatenKein DraftEntwurf anlegen, status: draft prüfen
WordPress 401/403Falsche CredentialsApplication Password neu erstellen
Kein OpenAI Text Output gefundenAndere Antwort-StrukturCode in JavaScript1 prüfen
AI output is not valid JSONKI antwortet mit Text/MarkdownSystem-Prompt verschärfen
Google Doc leerUpdate-Node fehltExpressions prüfen
Expression-FehlerNode-Name geändertNamen exakt übernehmen
Google Auth fehlgeschlagenOAuth abgelaufenCredential neu autorisieren