Files
WP-LIT-MCP/docs/guides/divi-library.md
T
janniclas.loosenandClaude Opus 5.5 b6d791d46a fix: UsageMatcher reads Divi 4 shortcodes like WordPress and Divi, everywhere (ruling P24)
- G1: every decoded string value of a Divi 5 opener is scanned for shortcodes;
  outside the openers only the remaining content is.
- G2: attributes are parsed like shortcode_parse_atts() and global_module is
  cast with (int), as Divi does.
- G3: a non-empty global_module other than "0" that casts to 0 makes Divi
  render the newest layout, so it counts for every entry (fail closed).
- The prefilter LIKEs use LOWER(post_content), so they are case-insensitive
  under any collation.
- The guide describes the fail-closed rule without an absolute claim.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:53:54 +02:00

9.6 KiB
Raw Blame History

Divi-Bibliothek und globale Module

Die Divi-Bibliothek speichert Layouts, Abschnitte, Zeilen und Module zur Wiederverwendung.

  • Normale Einträge werden beim Einfügen kopiert; die Kopie ist danach unabhängig.
  • Globale Einträge werden als Instanz eingefügt. Divi zeigt überall den aktuellen Inhalt des Bibliothekseintrags: eine Änderung dort wirkt sofort auf allen Seiten mit diesem Modul – auch auf veröffentlichten.

Werkzeuge

  • lit/library-list (über mcp-adapter-execute-ability): Einträge auflisten, Filter layout_type (layout, section, row, module), scope (normal, global), search (Titel), category (Name), weiterblättern mit cursor. Gelistet werden nur Einträge, die das Konto bearbeiten darf. Mit id: ein Eintrag im Detail – Knoten-Übersicht (outline), tree_rev und die Seiten, die auf ihn verweisen (affected, affected_count, hidden_count). Erkannt werden Divi-5-Instanzen (auch mit maskierten Zeichen) und Divi-4-Shortcodes mit global_module – auch in Texten von Divi-5-Modulen. Im Zweifel zählt eine Seite mit: ein Verweis, der sich nicht eindeutig lesen lässt, und ein global_module, das keine gültige Zahl ist (Divi zeigt dann den neuesten Eintrag), gelten als Verweis auf jeden Eintrag. Sehr ungewöhnliche Schreibweisen können trotzdem unerkannt bleiben. Steckt der Eintrag in einem wiederverwendbaren Block (wp_block), erscheint dieser Block in der Liste, nicht die Seite, die ihn einbettet – wie bei Divi selbst.
  • lit-library-insert: einen Eintrag in eine Divi-Seite einfügen. mode: "global" (Standard bei globalen Einträgen) fügt eine verknüpfte Instanz ein, mode: "copy" (Standard sonst) eine unabhängige Kopie. Position wie bei lit-divi-insert (parent, before, after, ohne Angabe ans Seitenende); tree_rev der Zielseite ist Pflicht. Die Kopie eines globalen Eintrags ist vollständig gelöst (auch darin enthaltene globale Module); in der Kopie eines normalen Eintrags bleiben globale Module verknüpft. mode: "global" geht nur bei globalen Einträgen mit genau einem Abschnitt, einer Zeile oder einem Modul ohne globale Module darin – sonst mode: "copy" verwenden. Nur aktive Einträge (nicht im Papierkorb) lassen sich einfügen.
  • lit/library-save: einen Abschnitt, eine Zeile oder ein Modul als neuen Eintrag speichern (post_id, tree_rev, Pfad-ID id, title, scope: "normal" oder "global", vorhandene categories/tags). Der Knoten auf der Seite bleibt eine eigenständige Kopie – um ihn zu verknüpfen, ihn durch eine Instanz ersetzen (siehe Ablauf unten). Ein Knoten, der selbst ein globales Modul ist oder eines enthält, lässt sich nicht als globaler Eintrag speichern.
  • lit/divi-node-copy: einen Knoten von einem Eintrag an eine Position eines anderen kopieren (source_post_id, source_id, source_tree_rev aus lit-divi-outline der Quelle – Pflicht, weil Pfad-IDs nur für diesen Stand gelten; Ziel mit post_id, tree_rev, Position). Quelle und Ziel dürfen Seiten oder Bibliothekseinträge sein. Die Kopie ist byte-gleich; globale Module bleiben verknüpft. Aus einem Bibliothekseintrag zu kopieren ist Einfügen aus der Bibliothek: es braucht dieselben Rechte und Freigaben wie lit-library-insert.
  • Die Divi-Werkzeuge arbeiten auch auf Bibliothekseinträgen: lit-divi-outline, lit-divi-node-get, lit-divi-insert, lit-divi-update, lit-divi-move, lit-divi-delete, lit/divi-duplicate-node und lit/divi-replace-text mit der ID des Eintrags als post_id.

Globale Module erkennen und ändern

  1. In lit-divi-outline einer Seite erscheinen Instanzen als z. B. g0 section "Kontakt" [global 1058] (nur lesbar); lit-divi-node-get nennt unter global die ID des Bibliothekseintrags. Auf der Seite lassen sie sich nur als Ganzes verschieben, duplizieren oder löschen.
  2. lit-divi-outline mit post_id = ID des Eintrags lesen und die Änderung wie auf einer Seite senden.
  3. Ohne confirm ist jede Änderung eines globalen Eintrags ein Probelauf – ebenso bei einem normalen Eintrag, auf den Seiten verweisen (Divi zeigt dort dessen aktuellen Inhalt): Antwort confirm_required mit affected (betroffene Seiten, höchstens 50), affected_count (alle) und hidden_count (Seiten, die das Konto nicht lesen darf – sie werden nur gezählt, ohne ID); gespeichert wird nichts.
  4. Dem Nutzer die betroffenen Seiten nennen und fragen. Erst nach Zustimmung dieselbe Änderung mit confirm: true wiederholen (bei lit-divi-delete gilt dasselbe confirm).
  5. Vorher entsteht eine Revision des Eintrags (revision_id); sind Revisionen abgeschaltet, eine Sicherungskopie im Papierkorb (backup_id). Schlägt das Speichern danach fehl, nennt der Fehler die backup_id. Nach dem Speichern wird Divis CSS-Cache für alle Seiten geleert.

Die Bestätigung wird abgelehnt (forbidden), wenn das Konto einen veröffentlichten, privaten oder geplanten Eintrag, der das Modul zeigt, nicht bearbeiten darf – schon der Probelauf warnt davor und nennt diese IDs in blocked_ids, nicht lesbare nur als Anzahl in blocked_hidden_count (Entwürfe blockieren nicht). Theme-Builder-Layouts (Header, Body, Footer, Vorlagen) blockieren außerdem, wenn die Divi-Rolle des Kontos „Theme Builder“ nicht erlaubt. Zeigen mehr als 2000 veröffentlichte, private oder geplante Einträge das Modul, lehnt LIT MCP die Bestätigung ab (unsupported); solche Einträge im Divi-Builder bearbeiten. Sind Revisionen für die Bibliothek abgeschaltet, lehnt das Werkzeug die Änderung außerdem ab (unsupported), wenn der Papierkorb deaktiviert ist oder das Konto kein unfiltered_html hat (die Sicherungskopie wäre dann nicht verlustfrei).

lit/divi-replace-text nimmt Bibliothekseinträge als targets (ID und tree_rev aus lit-divi-outline; der Probelauf listet nur Seiten des Inhaltstyps): normale Einträge werden gespeichert, globale (und normale, auf die Seiten verweisen) nie – ihr Ergebnis nennt stattdessen die betroffenen Seiten; die Änderung dann nach Rückfrage mit lit-divi-update und confirm: true vornehmen.

Regeln für Bibliothekseinträge: ein Abschnitts-, Zeilen- oder Modul-Eintrag behält genau einen Knoten dieses Typs (die Instanzen auf den Seiten erwarten ihn); ein Layout-Eintrag enthält nur Abschnitte; kein Eintrag wird leer; ein globaler Eintrag enthält keine globalen Module. Nur aktive Einträge lassen sich ändern.

lit-page-render-summary zeigt globale Module nicht (über die Schnittstelle rendert Divi sie nicht) und nennt sie in notes; ihren Inhalt mit lit-divi-outline und der ID lesen.

Rechte

  • WordPress: die Bibliothek nutzen = Beiträge bearbeiten dürfen; einen Eintrag lesen oder ändern = diesen Eintrag bearbeiten dürfen; neue Einträge anlegen = Beiträge veröffentlichen dürfen (Bibliothekseinträge sind immer aktiv).
  • Divi → Rollen-Editor: „Divi-Bibliothek“, „In der Bibliothek speichern“ (anlegen und ändern), „Aus der Bibliothek hinzufügen“ (einfügen), „Globale Bibliothekselemente bearbeiten“ (globale Einträge anlegen und ändern). Fehlt „Divi-Bibliothek“, gilt jeder Eintrag als nicht vorhanden (not_found) und die Liste antwortet mit forbidden; fehlt eines der anderen, antwortet das Werkzeug mit forbidden und diesem Hinweis.
  • Einstellungen → LIT MCP → Tools: Gruppe „Divi-Bibliothek“ auf „nur lesen“ sperrt jeden Schreibzugriff auf Bibliothekseinträge, auch über die Divi-Werkzeuge; deaktiviert gilt jeder Eintrag als nicht vorhanden. Grenze: Die Einträge selbst sind dann nicht lesbar und nicht änderbar, aber lit-divi-outline, lit-divi-node-get und lit-page-render-summary einer Seite nennen die ID eines dort verwendeten globalen Moduls weiterhin (auch ohne das Recht „Divi-Bibliothek“). Diese ID mit den Divi-Werkzeugen zu öffnen, antwortet not_found; dann nicht weiter versuchen. lit-library-insert und lit/divi-node-copy sind außerdem gesperrt, wenn lit-divi-insert gesperrt ist; lit/divi-node-copy mit einem Bibliothekseintrag als Quelle auch, wenn lit-library-insert gesperrt ist.
  • Ohne das Recht unfiltered_html überträgt LIT MCP beim Kopieren, Einfügen und Speichern (lit/divi-node-copy, lit-library-insert, lit/library-save) nur Knoten, die das Konto auch selbst schreiben dürfte. Abgelehnt werden – „nur im Divi-Builder“ – Knoten mit eigenem HTML, CSS oder HTML-Attributen, Interaktionen, einer Lottie-Quelle, dem Code-Modul, fremden Blöcken oder Freitext zwischen den Blöcken, Text mit HTML, das der HTML-Filter von WordPress verändern würde, und $variable-Verweisen, die die normale Prüfung nicht bestehen (z. B. HTML davor/danach). Das ist strenger als Divi selbst; die Antwort nennt jede Fundstelle (validation_failed), gespeichert wird nichts. Relative Links (kontakt/, /pfad, #anker) bleiben kopierbar.

Ablauf: globale Module vorschlagen

  1. Die Seiten lesen (lit-divi-outline) und wiederkehrende Abschnitte suchen (gleiche Admin-Labels oder Texte, z. B. Kontakt, Öffnungszeiten, Call-to-Action).
  2. Dem Nutzer vorschlagen, welche davon globale Module werden sollen, und erklären: eine Änderung wirkt danach auf allen Seiten.
  3. Nach Zustimmung den Abschnitt einer Seite mit lit/library-save und scope: "global" speichern.
  4. Auf jeder Seite (auch der ersten) die Instanz mit lit-library-insert direkt vor dem bisherigen Abschnitt einfügen und den bisherigen Abschnitt nach Rückfrage mit lit-divi-delete entfernen.
  5. Den Nutzer bitten, das Ergebnis im Divi-Builder anzusehen.

Unterscheiden sich die Abschnitte in Details, vorher mit dem Nutzer klären, welche Fassung gilt.