Files
janniclas.loosenandClaude Opus 5.5 e7bbe1e9d7 fix: find-similar marks replaceable matches and names excluded types (review M-3, M-7, M-8)
Every match carries replaceable: true only when it is identical and in a
page or post, the scope lit/library-make-global replaces; the description
and the guide say so. An excluded post type is answered like any
unavailable one, by its name (PostGuard::unavailableType()), and the
excluded list takes the Theme Builder types from DiviThemeBuilder::postTypes().

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:09:13 +02:00

12 KiB
Raw Permalink 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; dazu gehört ein maskiert in einem Modulwert gespeicherter divi/global-layout-Block: Divi wertet Blöcke in der Ausgabe von Shortcode-Modulen und in WooCommerce-Textmodulen (Warenkorb, Kasse) erneut aus, sodass er dort als globales Modul erscheinen kann (bekanntes Restrisiko, wie die übrigen ungewöhnlichen Schreibweisen; es braucht Bearbeitungsrechte auf der verweisenden Seite). 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 auf einen Eintrag verweist (auch als Divi-4-Shortcode mit global_module in einem Text), lässt sich nicht als globaler Eintrag speichern.
  • lit/library-find-similar: Knoten finden, die wie ein Knoten (post_id und id) oder ein Eintrag (library_id) aufgebaut sind. match: "identical" = gleicher Inhalt einschließlich aller Texte (nur Admin-Labels ausgenommen), "structure" = gleicher Aufbau (Modultypen, Spalten, Presets) mit anderen Inhalten. Durchsucht werden Einträge der Divi-Inhaltstypen (optional nur post_type), nie Bibliothekseinträge oder Theme-Builder-Layouts; nur Einträge, die das Konto bearbeiten darf. Höchstens 200 Einträge je Aufruf (limit), weiter mit next_cursor; bei sehr vielen Treffern endet ein Aufruf früher und sagt das in note. Jeder Treffer nennt tree_rev und replaceable (true: inhaltsgleich und in einer Seite oder einem Beitrag – nur solche Treffer ersetzt lit/library-make-global).
  • lit/library-make-global: einen Knoten einer Seite oder eines Beitrags in ein globales Modul umwandeln (post_id, tree_rev, id, title, optional categories/tags): neuer globaler Eintrag mit genau diesem Inhalt, der Knoten wird durch die Instanz ersetzt – alles oder nichts. Weitere, inhaltsgleiche Vorkommen ersetzen: library_id und targets (je post_id, tree_rev, ids der Treffer "identical"; höchstens 20 Seiten). Alle Ziele werden vorher geprüft; ohne confirm ist das ein Probelauf (confirm_required mit affected), dann confirm: true. Jede Seite bekommt eine Revision (pages). Nur Seiten und Beiträge (Inhaltstypen page und post), die das Konto bearbeiten darf – keine Bibliothekseinträge und keine Theme-Builder-Layouts, auch nicht als Quelle. Knoten, die auf einen Eintrag verweisen, werden kein globales Modul. Schlägt eine Seite fehl, bleiben die vorher ersetzten Seiten ersetzt (je mit Revision), die übrigen unverändert; der Fehler nennt alle drei Gruppen (changed_posts, failed_post, unchanged_posts).
  • 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). lit/revision-restore gilt nicht für Bibliothekseinträge: Zurück geht es über restore_url in der Antwort (Revisionsvergleich in WordPress, dort wiederherstellen). 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 das Konto den Theme Builder nicht benutzen darf (Divi-Rolle „Theme Builder“, edit_others_posts, edit_theme_options) oder die Gruppe „Divi Theme Builder“ auf „nur lesen“ steht; ohne Zugang zum Theme Builder erscheinen sie nur als Anzahl (hidden_count, blocked_hidden_count), nie mit ID oder Titel. 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.

Fügt eine Divi-Änderung einen Abschnitt ein, der wie ein Abschnitt der Bibliothek aufgebaut ist, nennt warnings den Eintrag – dann lit-library-insert erwägen.

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. Ohne das Recht „Divi-Bibliothek“ oder mit deaktivierter Gruppe nennen lit-divi-outline, lit-divi-node-get und lit-page-render-summary globale Module nur als solche, ohne ihre ID. 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. Wiederkehrende Abschnitte suchen: lit/library-find-similar mit einem typischen Abschnitt (post_id, id) – z. B. Kontakt, Öffnungszeiten, Call-to-Action.
  2. Dem Nutzer die Treffer zeigen und erklären: eine Änderung wirkt danach auf allen Seiten mit dem Modul. Treffer mit match: "structure" unterscheiden sich im Inhalt – vorher klären, welche Fassung gilt, und die übrigen angleichen (lit-divi-update) oder weglassen.
  3. Nach Zustimmung lit/library-make-global mit dem gewählten Abschnitt.
  4. Die Treffer mit replaceable: true mit lit/library-make-global (library_id, targets mit der tree_rev aus lit/library-find-similar) ersetzen: Probelauf zeigen, dann confirm: true. Inhaltsgleiche Treffer in anderen Inhaltstypen (replaceable: false) im Divi-Builder durch das globale Modul ersetzen.
  5. Den Nutzer bitten, das Ergebnis im Divi-Builder anzusehen.