- 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>
9.6 KiB
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(übermcp-adapter-execute-ability): Einträge auflisten, Filterlayout_type(layout,section,row,module),scope(normal,global),search(Titel),category(Name), weiterblättern mitcursor. Gelistet werden nur Einträge, die das Konto bearbeiten darf. Mitid: ein Eintrag im Detail – Knoten-Übersicht (outline),tree_revund die Seiten, die auf ihn verweisen (affected,affected_count,hidden_count). Erkannt werden Divi-5-Instanzen (auch mit maskierten Zeichen) und Divi-4-Shortcodes mitglobal_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 einglobal_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 beilit-divi-insert(parent,before,after, ohne Angabe ans Seitenende);tree_revder 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 – sonstmode: "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-IDid,title,scope: "normal"oder"global", vorhandenecategories/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_revauslit-divi-outlineder Quelle – Pflicht, weil Pfad-IDs nur für diesen Stand gelten; Ziel mitpost_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 wielit-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-nodeundlit/divi-replace-textmit der ID des Eintrags alspost_id.
Globale Module erkennen und ändern
- In
lit-divi-outlineeiner Seite erscheinen Instanzen als z. B.g0 section "Kontakt" [global 1058] (nur lesbar);lit-divi-node-getnennt unterglobaldie ID des Bibliothekseintrags. Auf der Seite lassen sie sich nur als Ganzes verschieben, duplizieren oder löschen. lit-divi-outlinemitpost_id= ID des Eintrags lesen und die Änderung wie auf einer Seite senden.- Ohne
confirmist jede Änderung eines globalen Eintrags ein Probelauf – ebenso bei einem normalen Eintrag, auf den Seiten verweisen (Divi zeigt dort dessen aktuellen Inhalt): Antwortconfirm_requiredmitaffected(betroffene Seiten, höchstens 50),affected_count(alle) undhidden_count(Seiten, die das Konto nicht lesen darf – sie werden nur gezählt, ohne ID); gespeichert wird nichts. - Dem Nutzer die betroffenen Seiten nennen und fragen. Erst nach Zustimmung dieselbe Änderung mit
confirm: truewiederholen (beilit-divi-deletegilt dasselbeconfirm). - 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 diebackup_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 mitforbidden; fehlt eines der anderen, antwortet das Werkzeug mitforbiddenund 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-getundlit-page-render-summaryeiner Seite nennen die ID eines dort verwendeten globalen Moduls weiterhin (auch ohne das Recht „Divi-Bibliothek“). Diese ID mit den Divi-Werkzeugen zu öffnen, antwortetnot_found; dann nicht weiter versuchen.lit-library-insertundlit/divi-node-copysind außerdem gesperrt, wennlit-divi-insertgesperrt ist;lit/divi-node-copymit einem Bibliothekseintrag als Quelle auch, wennlit-library-insertgesperrt 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
- Die Seiten lesen (
lit-divi-outline) und wiederkehrende Abschnitte suchen (gleiche Admin-Labels oder Texte, z. B. Kontakt, Öffnungszeiten, Call-to-Action). - Dem Nutzer vorschlagen, welche davon globale Module werden sollen, und erklären: eine Änderung wirkt danach auf allen Seiten.
- Nach Zustimmung den Abschnitt einer Seite mit
lit/library-saveundscope: "global"speichern. - Auf jeder Seite (auch der ersten) die Instanz mit
lit-library-insertdirekt vor dem bisherigen Abschnitt einfügen und den bisherigen Abschnitt nach Rückfrage mitlit-divi-deleteentfernen. - Den Nutzer bitten, das Ergebnis im Divi-Builder anzusehen.
Unterscheiden sich die Abschnitte in Details, vorher mit dem Nutzer klären, welche Fassung gilt.