# 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

# 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 und description.

# 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

  1. Cron – zyklischer Start (z. B. alle 4 h)
  2. HTTP Request – neueste Artikel / Kategorie‑Infos holen
  3. Function (Code) – Response parsen, Kategorie‑Objekte formen
  4. MySQLpost_count u. Grunddaten upsert in d2s_category_descriptions
  5. MySQL – Check: description vorhanden?
  6. IF – Pfad ja/nein
  7. AI Node – (nur nein) Kurzbeschreibung 2–4 Sätze, klar & nutzerorientiert
  8. MySQL – (nur nein) Beschreibung speichern, status='ok'

Nebenworkflow (Sync)

  1. Cron – zyklisch (z. B. täglich)
  2. MySQL – alle Kategorien mit lokaler description holen
  3. 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} mit description

# 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