#
Kategorie-Übersicht und Beschreibungssync
Kurzfassung: Dieser Workflow erstellt eine einheitliche Übersicht aller Kategorien, generiert (falls nötig) kurze Beschreibungen per KI und synchronisiert diese mit WordPress. Die Seite Alle Kategorien zeigt anschließend Name, Artikelanzahl und Beschreibung an.
#
Ziel
- Automatisch erstellte WordPress‑Kategorien einlesen (siehe: Tags & Kategorien Auto‑Erstellung).
- Artikelanzahl je Kategorie ermitteln und in der DB persistieren.
- Fehlende Kategoriebeschreibungen per KI erzeugen und speichern.
- Beschreibungen regelmäßig mit WordPress synchronisieren.
#
Datenquellen & Tabellen
- WordPress REST API:
/wp-json/wp/v2/categories
- DB Tabelle:
d2s_category_descriptions
- Spalten:
id, term_id, name, slug, url, post_count, title, description, status, updated_at
- Spalten:
#
Hauptworkflow: Kategorien erfassen & Texte erzeugen
flowchart TD C["Cron"] --> H["HTTP Get: Artikel holen"] H --> L["Loop Over"] L --> P["Code Node: Parsen"] P --> M1["MySQL: Kategorie + Artikelanzahl speichern"] M1 --> M2["MySQL: Beschreibung vorhanden?"] M2 -->|ja| F["Fertig für diese Kategorie"] M2 -->|nein| K["KI Node: Kurzbeschreibung schreiben"] K --> M3["MySQL: Beschreibung speichern"] M3 --> F
Ergebnis:
post_count
wird laufend aktualisiert.- Fehlende
description
wird automatisch ergänzt. - Ausgabe‑Ziel: Seite Alle Kategorien listet
Name
,post_count
unddescription
.
#
Nebenworkflow: Beschreibungen zu WordPress synchronisieren
flowchart TD C2["Cron"] --> Q["MySQL: alle Kategorien holen"] Q --> L2["Loop Over"] L2 --> W["HTTP Get: WP‑Kategorien abfragen"] W --> I["IF: WP‑Kategorie ohne Beschreibung?"] I -->|ja| U["HTTP Post: WP‑Beschreibung setzen"] I -->|nein| X["Überspringen"] U --> D["Done"] X --> D
#
N8n‑Nodes (Blueprint)
Hauptworkflow
- Cron – zyklischer Start (z. B. alle 4 h)
- HTTP Request – neueste Artikel / Kategorie‑Infos holen
- Function (Code) – Response parsen, Kategorie‑Objekte formen
- MySQL –
post_count
u. Grunddaten upsert ind2s_category_descriptions
- MySQL – Check:
description
vorhanden? - IF – Pfad ja/nein
- AI Node – (nur nein) Kurzbeschreibung 2–4 Sätze, klar & nutzerorientiert
- MySQL – (nur nein) Beschreibung speichern,
status='ok'
Nebenworkflow (Sync)
- Cron – zyklisch (z. B. täglich)
- MySQL – alle Kategorien mit lokaler
description
holen - Loop – pro Kategorie:
- HTTP Get
/wp/v2/categories?search={slug}&_fields=id,description
- IF: falls
description
in WP leer → HTTP Post/wp/v2/categories/{id}
mitdescription
- HTTP Get
#
API‑Beispiele (WordPress)
Kategorie suchen (GET):
GET https://donau2space.de/wp-json/wp/v2/categories?search={{ ERROR }}&_fields=id,name,slug,description&per_page=100
Kategorie‑Beschreibung setzen (POST):
POST https://donau2space.de/wp-json/wp/v2/categories/{{ ERROR }}
Authorization: Bearer {{ ERROR }}
Content-Type: application/json
{
"description": "{{ ERROR }}"
}
#
SQL‑Snippets
Fehlende Beschreibungen finden:
SELECT term_id, name, slug, url
FROM d2s_category_descriptions
WHERE (description IS NULL OR description = '')
AND (status IN ('new','error'));
Upsert Artikelanzahl:
INSERT INTO d2s_category_descriptions (term_id, name, slug, post_count, updated_at)
VALUES (:term_id, :name, :slug, :post_count, NOW())
ON DUPLICATE KEY UPDATE post_count = VALUES(post_count), updated_at = NOW();
#
Caching & Performance
- Cache die fertige Ausgabe für 4 Stunden (z. B. per transient/Datei‑Cache), damit die Übersicht schnell bleibt.
- API‑Calls bündeln: erst lokal prüfen, dann nur fehlende WP‑Beschreibungen setzen.
#
Validierung & Qualität
- Beschreibungslänge: Ziel 2–4 Sätze (ca. 200–350 Zeichen), keine Buzzwords.
- Inhalt: erklärt Worum geht’s in dieser Kategorie? + Was finde ich dort konkret?
- Fallback: wenn KI leer/unsinnig →
status='error'
setzen, manueller Review‑Bucket.
#
Fehlerbehandlung
- Markiere bei API‑Fehlern
status='error'
+ Fehlermeldung in separater Log‑Tabelle. - Wiederhole Schreib‑Versuche mit exponentiellem Backoff (1m, 5m, 30m).
#
Sicherheit
- WP‑Zugriff über Application Password oder JWT mit minimalen Rechten (Terms bearbeiten).
- Secrets in n8n Credentials ablegen, niemals im Code Node.
#
Output‑Ziel
- Seite: Alle Kategorien
- Darstellung: Kategorie (verlinkt) • N Artikel + Kurzbeschreibung