wData.pageIds: neue Teams werden hier gespeichert, wLoad() liest sie und ergÀnzt WW_TEAMS
Mail-Routing (seit 09.10.2026): pro Team Felder Slug (nur Anzeige), Mail (Pflicht, Ziel bei Teamwahl) und Sammeladresse (Ziel ohne Teamwahl, Vorschlagsliste, neue Adressen als âneuâ markiert + RĂŒckfrage beim Speichern); Reiter âMail-Routingâ mit Fallback + Kontroll-Ăbersicht je Sammeladresse. Datenspeicher: teams[slug].mail, teams[slug].sammel, routing.fallback
JSON in WP-Content wird curly-quote-converted â base64 vor dem Speichern
Nonce: immer N() beim Aufruf, nie als Variable cachen
CSS in Elementor HTML-Widgets: Customizer Additional CSS zuverlÀssiger
MCP blockt URLs, query strings, Jahreszahlen in JS-Outputs
Elementor Element-Cache hĂ€lt gerenderte Widgets 24 h (Einstellung element_cache_ttl) â nach Ănderungen an Seiten/CP-Code: Elementor â Werkzeuge â âLösche Dateien und Datenâ, CP danach neu laden (sonst lĂ€uft alter CP-Code)
MenĂŒ (Max Mega Menu, ID 3) besteht aus manuell gepflegten individuellen Links; ein Team kann mehrere MenĂŒ-Links haben
Halle „Reinickendorfer Str.“ (Anna-Lindh-Grundschule, Reinickendorfer StraĂe 60, 13347 Berlin) auf Spielbetrieb-Seite ergĂ€nzt â ĂPNV/Eingang fehlen noch, David ok damit
KĂŒndigen-Thema prĂ€senter platziert: Footer-Link „KĂŒndigen“ auf allen 49 relevanten Seiten, Link „Mehr zur KĂŒndigung“ auf Mitglied-werden-Seite, KĂŒndigung-Kasten auf Mitgliederbereich-Seite (Anker #kuendigung), echte easyVerein-Club-URL (easyverein.com/public/weddwiesel/), „Zum Mitgliederbereich“-Button aus KĂŒndigung-Box raus und an den Seitenanfang verschoben
Probetraining-Formular (Fluent Forms ID 3): Vordruck/Platzhaltertext im Nachrichtenfeld ergĂ€nzt („Wo hast du gespielt? Wie lange? In welchem Team/welcher Liga? Wann zuletzt aktiv?“)
â Erledigt (30.09.2026)
MenĂŒ-Regel: Alle U10/U11-Teams stehen unter âMinisâ UND unter âJungenâ bzw. âMĂ€dchenâ (je Team 2 MenĂŒ-Links). ErgĂ€nzt: mU10-F (Minis), mU10-A (Jungen), wU10 + wU11 (MĂ€dchen)
CP-Fix syncMenuVisibility: Aktiv/Inaktiv schaltet jetzt ALLE MenĂŒ-Links eines Teams (vorher nur einen â Ursache fĂŒr mU11-A-Fehler unter âJungenâ). Live getestet mit mU10-A
Anker-Logik: CP erzeugt Hallen-Links als /hallen/#halle-{hid}, hid = Hallenname kleingeschrieben, Nicht-a-z0-9 â â-â, erster Teil (z. B. WiesenstraĂe â halle-wiesenstra). Hallen-Karten tragen passende IDs. Neue Halle im CP = Karte auf 2512 mit gleicher ID ergĂ€nzen
Spielbetrieb (62): nur noch Gesamt-Spielplan + 2 Heimhallen + Button âAlle Hallen ââ
Alle Teamseiten per CP-Sync auf /hallen/-Links umgestellt; Herren 2: Tippfehler ParkstraĂe â PankstraĂe korrigiert
Ăltere offene Punkte (Mail-Routing, SMTP, BBV-Rollout, Verifizierungen) von David verworfen
â Probetraining-Formular: Vereinserfahrung + Liga (04.10.2026)
Fluent Forms ID 3: Frage (Feld vorerfahrung) umbenannt in âHast du schon in einem anderen Verein Basketball gespielt?â, Optionen âJaâ/âNeinâ (Werte ja/nein unverĂ€ndert), Hilfetext âAuch ohne Vereinserfahrung bist du herzlich willkommen!â
Neues optionales Textfeld liga âIn welcher Liga?â (Platzhalter âz. B. Bezirksliga, Landesliga, Oberliga âŠâ), sichtbar nur wenn ist_mini = nein UND vorerfahrung = ja
Im Browser getestet: Jahrgang 2012 + Ja â Liga sichtbar; Nein â ausgeblendet; Jahrgang 2019 â Frage und Liga ausgeblendet
â Probetraining-Formular: Vorerfahrung ab U10 ausgeblendet (30.09.2026)
Fluent Forms ID 3: verstecktes Feld ist_mini (Standard âneinâ); Frage âHast du schon Basketball gespielt?â nur sichtbar, wenn ist_mini = nein (ausgeblendete Pflichtfelder werden nicht geprĂŒft)
WPCode-Snippet 2517 âProbetraining: Vorerfahrung ab U10 ausblenden (Grenze aus CP)â (PHP, nur Seite 155): liest Datenspeicher 771, Grenze = Ă€ltester gebVon der aktiven Teams mit âU10â im Namen (aktuell 2017); JS setzt ist_mini = âjaâ, wenn Geburtsjahr â„ Grenze
Regel richtet sich nur nach dem Geburtsjahr, nicht nach dem Team. Grenze wandert automatisch mit, wenn die U10-JahrgĂ€nge im CP umgestellt werden. Fallback: keine Grenze ermittelbar / ungĂŒltige Eingabe â Frage wird angezeigt
Hinweis: Fluent-Bedingung mit Operator â!=â auf leeres Hidden-Feld blendete die Frage immer aus â deshalb â= neinâ
01.10.2026 â Jahrgang/Team als Dropdown (Snippet 2517 erweitert): Geburtsjahr-Dropdown aus den JahrgĂ€ngen der aktiven Jugendteams (aktuell 2022â2007) + â{Ă€ltesterâ1} oder Ă€lter (Erwachsene)â; Team-Dropdown zeigt nur aktive Teams passend zu Jahrgang + Geschlecht (mU/Herren = mĂ€nnlich, wU/Damen = weiblich, U9/Kitasport/Mixed = beide), erste Option âWeiĂ ich nicht / egalâ. Die Original-Fluent-Felder geburtsjahr/team bleiben versteckt und erhalten die Auswahl â Mail-Routing (functions.php, fluentform/email_to) unverĂ€ndert. Anlass: Eingabe â05.04.2020â wurde per intval zu 5 â herren@
Vorbelegung von der Teamseite: Link /mitmachen/probetraining/?team={slug} wĂ€hlt das Team im Dropdown vor; Geburtsjahr wird mit vorgewĂ€hlt, wenn eindeutig (Team mit genau einem Jahrgang bzw. Erwachsene). Ein Ă€lteres Skript auf der Seite schreibt den Slug zusĂ€tzlich ins versteckte Feld â Snippet 2517 hĂ€lt das Feld 9 s lang mit dem Dropdown synchron
Offen/bekannt: ohne Teamwahl greifen weiter die festen Jahrgangsregeln in functions.php (Schritt 3)
â Warteliste (01.10.2026)
Formular: Team-Dropdown markiert Teams mit CP-Status âvollâ als â(Warteliste)â; bei Auswahl erscheint der Hinweis #ww-warteliste-hinweis direkt unter dem Team-Feld und das Hidden-Feld warteliste (FF 3) wird auf âjaâ gesetzt (Snippet 2517)
Mail: Betreff bekommt â[Warteliste]â vorangestellt, wenn warteliste = ja (Filter fluentform/email_subject in Snippet 2517)
Ăbersicht: Shortcode
Warteliste Probetraining
Stand 24.10.2026 06:05 · sortiert nach Eingang (Platz 1 = am längsten wartend)
Aktuell steht niemand auf der Warteliste.
Erledigt1
Team
Name
Jahrgang
Ergebnis
Am
Eingang
Herren 2
David Schreiber
2006 oder Àlter
Platz bekommen
01.10.2026
01.10.2026
(WPCode-Snippet 2523) auf Seite âWartelisteâ (ID 2524, /warteliste/) â alle Anfragen mit warteliste = ja, gruppiert nach Team, Ă€lteste zuerst; Erledigte in Fluent Forms in den Papierkorb verschieben â verschwinden aus der Liste. Seite ist veröffentlicht und passwortgeschĂŒtzt (Passwort von David gesetzt, fĂŒr Trainer ohne WordPress-Login)
Nur neue Anfragen ab 01.10.2026 sind erfasst (Ă€ltere haben kein Warteliste-Feld)
Erledigt-Markierung: Buttons âPlatz bekommenâ / âKein Interesse mehrâ je Zeile (ohne WP-Login, nur auf entsperrter Passwortseite 2524 oder als Admin), Bereich âErledigtâ mit âRĂŒckgĂ€ngigâ. Speicherung in Option ww_warteliste_status (Eintrags-ID â Ergebnis + Datum), AJAX-Action ww_wl_mark mit Nonce
Team-Filter: Dropdown oben auf der Wartelisten-Seite (filtert offene Liste + Erledigt); Direktlink pro Team: /warteliste/?team={slug}, z. B. ?team=herren-2
Erinnerung: Wechselt ein Team im CP von âvollâ auf âfreiâ (Hook post_updated auf Datenspeicher 771) und es gibt offene Wartelisten-EintrĂ€ge, geht eine Mail an {slug}@weddinger-wiesel.de mit der Liste und Link zur Ăbersicht
â BBV Spielplan/Tabelle auf Teamseiten (07.10.2026)
Umsetzung ĂŒber die offiziellen DBB-Widgets (widget.mannschaftswidget / widget.ligawidget). Sie laufen als iframe im Browser, deshalb greift die Server-Sperre bei all-inkl nicht.
Platzhalter pro Teamseite: <div class="ww-bbv-widget" data-bbv-type="mannschaft|liga" data-bbv-id="âŠ">. Die IDs kommen aus dem CP (Felder bbvId / bbvLigaNr) und werden beim CP-Sync eingetragen.
Das Lade-Script steht im WPCode-Snippet 2473 âBBV Spielplan/Tabelle Widgetsâ.
Fix 07.10.: Das Snippet war auf eine feste ID-Liste (179â239) beschrĂ€nkt, dadurch fehlten die Widgets auf mU10-f, mU13-1, mU13-2 und wU12-2. Die Bedingung ist jetzt is_page() && wp_get_post_parent_id(get_queried_object_id()) == 53, also alle Unterseiten von âTeamsâ. GeprĂŒft: Alle 32 Teamseiten laden das Script, die Startseite nicht.
Snippet 2517: Bei â{Ă€ltester Jugendjahrgangâ1} oder Ă€lter (Erwachsene)â erscheint ein zweites Dropdown âGenaues Geburtsjahrâ (von diesem Jahrgang bis aktuelles Jahr â 80). Das gewĂ€hlte Jahr wird ins Feld geburtsjahr geschrieben. Das sichtbare Hauptdropdown bleibt auf â⊠oder Ă€lterâ, Teamfilter und Mini-Erkennung bleiben unverĂ€ndert. Ohne genaues Jahr greift die Pflichtfeld-PrĂŒfung.
Getestet: Pflichtfeld-Meldung, Eintrag mit 1994, Mail an herren-2@ angekommen (TesteintrÀge #40/#41).
Hinweis: Eine ausgedachte Antwort-an-Adresse (example.com) fĂŒhrte dazu, dass die Mail nicht ankam. FĂŒr Tests eine echte Adresse verwenden.
â Backups (07.10.2026)
Duplicator (manuell, vor gröĂeren Umbauten): Backup â20261007_vor_routing_umbauâ (07.10.2026 19:14, 174,7 MB, Datenbank + alle Dateien, ohne Filter). Liegt auf dem Server unter wp-content/backups-dup-lite (Ordner nach auĂen gesperrt). Duplicator Lite kann keine ZeitplĂ€ne. Hinweis: Im Claude-Browserfenster bleibt der Duplicator-Assistent bei Schritt 1 hĂ€ngen, im normalen Browser funktioniert er.
UpdraftPlus 1.26.8 (automatisch): Dateien + Datenbank tÀglich, je 7 Backups aufbewahrt. NÀchster Lauf 08.10.2026 09:21, danach tÀglich. Erstes Backup am 07.10.2026 19:21 erfolgreich (Datenbank, Plugins, Themes, Uploads, Andere). Ablage bisher nur auf dem Server, Google Drive/Dropbox noch nicht verbunden. Geplante LÀufe starten erst beim nÀchsten Seitenaufruf nach der geplanten Zeit (WP-Cron).
functions.php: Einzelsicherung vor dem Routing-Umbau als functions.php.backup-2026-10-07.php (im Claude-Projekt unter backups/).
09.10.2026 vor Mail-Routing im CP (Claude-Projekt, backups/): functions.php.backup-2026-10-09.php (SHA-256 de642f27âŠ), cp766_elementor_data.backup-2026-10-09.json (3c889828âŠ), ds771_content.backup-2026-10-09.txt (a98944edâŠ). Hinweis: das Backup vom 07.10. ist eine Ă€ltere Fassung, nicht der Stand vor dem 09.10.
â Mitglied werden (156) ĂŒberarbeitet (09.10.2026)
Reihenfolge: âMitgliedsbeitrĂ€geâ (mv_beitraege) jetzt vor âVorteile als Mitgliedâ (mv_vorteile)
âUnsere Aktionenâ (Container 7505a8d) per Elementor auf allen GerĂ€ten ausgeblendet, nicht gelöscht
Nachtrag: Sozialbeitrag 200 ⏠in Spalte âErmĂ€Ăigtâ; AufnahmegebĂŒhr-Kasten um WechselgebĂŒhr ergĂ€nzt (Jugend 17,85 âŹ, Erwachsene 29,75 âŹ, vom DBB erhoben, 1:1 weitergegeben)
â Mail-Routing im CP pflegbar (09.10.2026)
Alle Probetraining-Adressen (Fluent Forms ID 3) kommen jetzt aus dem CP, nichts mehr fest im Code. Slugs, URLs, Widgets unverÀndert.
Regeln (functions.php, Filter fluentform/email_to): 1. Team gewĂ€hlt â Feld Mail des Teams (leer â Fallback). 2. Ohne Team â aktive Teams, deren Jahrgang passt und deren Geschlecht passt (mU = mĂ€nnlich, wU = weiblich, sonst alle) â deren Sammeladresse; Erwachsene (Ă€lter als Ă€ltester Jugendjahrgang) â Teams der Kategorie Herren (inkl. Mixed) bzw. Damen; mehrere verschiedene Sammeladressen â Mail an alle. 3. Kein Treffer / âKeine Angabeâ ohne gemischtes Team / Erwachsene mit âKeine Angabeâ â Fallback (CP, vorbelegt spielbetrieb). Fehlen die neuen Felder, greift wie frĂŒher Slug bzw. abgeleitete Adresse.
Vorbelegung: Mail = Slug, Sammeladresse = alte Ableitung (mu14-1 â mu14, Herren/Mixed â herren, Damen/Frauen Freizeit â damen). mU11 von David auf mu11 korrigiert; Anfrage FF #39 (Jamil Haberland) an mU11-Trainer weitergeleitet.
functions.php neu: SHA-256 9fc1cb7aâŠ; CP-Widget cp_w neu (_elementor_data 81ed7f69âŠ).
Offline-Test: alle 171 im Formular möglichen Kombinationen (Jahrgang Ă Geschlecht Ă angebotene Teams) â alter und neuer Code identisch; SonderfĂ€lle (leere Mail, mehrere Treffer, fehlende Felder, fremde Adresse) geprĂŒft.
Live-Test 09.10.2026: 13 Anfragen (L1âL13, Absender david.schreiber@), alle laut FluentSMTP-Log an die erwartete Adresse (mu14-1, damen-1 [Warteliste], mixed, u9, mu14-2 via ?team=, mu13, wu12, kitasport, herren, damen, 3Ă spielbetrieb). Echte Anfrage #68 dazwischen korrekt an mu16.
Offen: TesteintrĂ€ge #67, #69â#80 liegen im Fluent-Forms-Papierkorb â endgĂŒltig löschen erst nach RĂŒckmeldung, dass alle Mails angekommen sind.