Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
5.0 KiB
Etappe 4e – Divi-Schleifen: Recherche (Divi 5.15.1)
Stand 2026-10-20. Hinweis zur Herkunft: Die ursprüngliche Recherche (research-4e-loop-divi.md im Scratchpad der Planung) war nicht mehr auffindbar. Diese Notiz ist deshalb aus den Belegen rekonstruiert, die im Repo stehen: Security-Audit (2026-10-19-etappe-4e-security-audit.md), Task-Berichte der SDD-Läufe und der Divi-Quelltext 5.15.1 selbst. Sie enthält nur Fakten, die dort belegt sind; Zeilenangaben beziehen sich auf includes/builder-5/server/Packages/Module/Options/Loop/ (Divi 5.15.1) und sind dort geprüft oder aus dem Audit übernommen.
1. Speicherort und Schalter
- Die Schleife steht im Block-Attribut
module.advanced.loop, je Gerät und Zustand:desktop.value.enable("on") unddesktop.value.queryType. - Divi liest beide Werte mit
sanitize_key(); fehltqueryType, giltpost_types(LoopUtils.php:725-732). Nurdesktopzählt; Tablet-, Phone- und Hover-Varianten schalten keine Schleife (Ruling X1). - Die Schleife wird beim Rendern aus dem rohen Dokument gelesen (
WP_Block_Parser,LoopUtils.php:4219-4229). Presets (LoopPresetAttrsMap) starten, stoppen oder ändern eine Schleife auf der Website nicht.
2. queryType-Werte
queryType |
Art im Plugin | Bemerkung |
|---|---|---|
post_types, current_page |
Beiträge (post) | Standard bei fehlendem Wert |
post_taxonomies |
Terme (term) | Divi bildet ihn intern auf terms ab (LoopUtils.php:735-738) |
user_roles |
Benutzer (user) | |
menus |
Menü (menu) | |
terms, users |
Terme, Benutzer | Aliase, die Divi kennt (LoopUtils.php:881-898); das Plugin normalisiert wie sanitize_key (Audit L2) |
repeater_<ACF-Feld> |
nicht unterstützt | verlangt die Einstellung acf_type; loop_* darin wird abgelehnt (X7e) |
3. Kontext eines Moduls
- Maßgeblich ist die innerste eingeschaltete Schleife auf dem Weg Wurzel → Knoten, den Knoten selbst eingeschlossen (X1).
- Verschachtelte Schleifen: Hat die innere Schleife keine Treffer, gibt Divi den Block unverändert zurück (
__loop_no_results,LoopUtils.php:4449-4457); die äußere Schleife löst danach die$variable(…)$-Verweise mit ihrem Objekt auf (LoopUtils.php:4572-4598). Deshalb gilt für_meta_key_-Optionen die Kettenregel (Audit M1). - Innerhalb einer Schleife reicht Divi
loop_id,loop_query_typeundloop_objectan jede Inhaltsvariable weiter.
4. loop_*-Optionen
- Divi registriert 34 Loop-Optionen. Die Art bestimmt die Gruppe der Option („Loop Terms“, „Loop Users“, übrige = Beiträge, Menü nach Name); die drei Meta-Schlüssel-Optionen
loop_post_meta_key_manual_custom_field,loop_user_…,loop_term_…ordnet der Name zu, weil ihre Gruppennamen übersetzt sind. - Gespeichert wird der Array-Schlüssel der Option (
loop_term_name), nicht die interneid.
5. Gefahr des Fehlabgleichs (Sicherheitsgrenze)
loop_<post|user|term>_meta_key_*entnimmt die Meta-Art dem Namen und liest die Metadaten des Objekts mit der ID der Schleife (DynamicContentLoopOptions.php:145-158). Eine Post-Meta-Option in einer Term- oder Benutzer-Schleife liest also die Metadaten des Beitrags mit derselben ID, auch von Entwürfen und privaten Beiträgen (umgekehrt Benutzer-/Term-Meta in einer Beitrags-Schleife).- Die übrigen
loop_*-Resolver prüfeninstanceof WP_Post/WP_Term/WP_Userund liefern für ein fremdes Objekt''(LoopUtils.php:3162+,3553+,3599+). - Benutzer-Meta in Benutzer-Schleifen verlangt vom Betrachter
manage_users(nicht ACF) bzw.list_users(ACF) (DynamicContentACFUtils.php); kein Leck an Besucher. - Folge im Plugin: Ein
loop_*-Wert ist nur erlaubt, wenn die Art des Schleifen-Kontexts zur Art der Option passt; ohne Schleife ist jedeloop_*-Option abgelehnt.
6. Rendern außerhalb einer Schleife
Ohne Schleife in der Vorfahrenkette bleiben loop_*-Verweise ohne Quelle und rendern leer; das Plugin lehnt sie deshalb schon beim Schreiben ab, mit der Meldung „braucht eine Divi-Schleife“.
7. Grenzen (dokumentiert, nicht gelöst)
- Presets: Ein Preset kann
loop_*-Verweise und Schleifen-Einstellungen tragen; die Baumprüfung erkennt Schleifen aus Presets nicht (fail closed). Auf der Website bleibt das ohne Wirkung (siehe 1). - Globale Module: Der Inhalt eines globalen Eintrags hat keinen Schleifen-Kontext (
loop_*im Eintrag wird abgelehnt). Eine globale Instanz in einer Schleife expandiert Divi vor der Schleifen-Phase (BlockParser.php:917-924); das Plugin sieht nur die lokalen Attribute der Instanz (Audit L3, offen). - Shortcodes und Bedingungen in Term-/Benutzer-/Menü-Schleifen laufen gegen den Beitrag mit der Term-/Benutzer-ID (
LoopUtils.php:4507-4510, Audit I5). - Rechte: Schleifen über
attrskönnen private Beiträge und Benutzerdaten ausgeben, wie im Divi-Builder; das Plugin verlangt dafürlist_users(Benutzer) bzw.read_private_posts(any,attachment, leeresubTypes; Audit L1, Option B).
Fußnote: Alle Angaben gegen Divi 5.15.1 (Formate zuvor aus 5.2.1 und 5.14.0 geprüft; 5.15.1 maßgeblich).