{"id":361650,"date":"2026-09-16T16:31:49","date_gmt":"2026-09-16T16:31:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/fabrielsoftware-team-manager\/"},"modified":"2026-10-11T17:06:44","modified_gmt":"2026-10-11T17:06:44","slug":"fabriel-team-manager","status":"publish","type":"plugin","link":"https:\/\/test.wordpress.org\/plugins\/fabriel-team-manager\/","author":23557899,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.4","stable_tag":"1.2.4","tested":"7.1.3","requires":"6.1","requires_php":"7.4","requires_plugins":null,"header_name":"Fabriel Team Manager","header_author":"Fabriel Software","header_description":"Zentrale Verwaltung von Mannschaften, Zeitr\u00e4umen, Spielpl\u00e4nen und Tabellen f\u00fcr Widgets von fussball.de.","assets_banners_color":"0f1f31","last_updated":"2026-10-11 17:06:44","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/paypal.me\/fabergab","header_plugin_uri":"https:\/\/teammanager.fabrielsoftware.de\/","header_author_uri":"https:\/\/fabrielsoftware.de\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":173,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.2":{"tag":"1.2.2","author":"fabrielsoftware","date":"2026-09-16 16:31:36","revision":3698992},"1.2.3":{"tag":"1.2.3","author":"fabrielsoftware","date":"2026-10-02 16:31:07","revision":3725142},"1.2.4":{"tag":"1.2.4","author":"fabrielsoftware","date":"2026-10-11 17:06:44","revision":3739839}},"upgrade_notice":{"1.2.4":"<p>Stellt die Mannschaftsauswahl im Block \u201eSpielplan &amp; Tabelle\u201c wieder her. Erfordert jetzt mindestens WordPress 6.1.<\/p>","1.1.0":"<p>Mannschaften werden beim ersten Aufruf nach dem Update automatisch in ein neues Speicherformat migriert. Bitte erstellen Sie vorab ein Backup.<\/p>","1.0.1":"<p>Behebt einen Fehler, durch den fehlgeschlagene Speichervorg\u00e4nge Formulardaten verwarfen, und erg\u00e4nzt eine Zwei-Klick-L\u00f6sung f\u00fcr externe Inhalte.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3698992,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3698992,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3698992,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3698992,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"fstm\/fussball-tables-overview":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"fstm\/fussball-tables-overview","version":"1.2.0","title":"Tabellen-\u00dcbersicht (Grid)","category":"fs-tm-blocks","icon":"grid-view","description":"Raster-\u00dcbersicht aller Ligatabellen der Mannschaften.","textdomain":"fabriel-team-manager","attributes":{"columns":{"type":"string","default":"2"},"colorScheme":{"type":"string","default":""},"backgroundColor":{"type":"string","default":""},"textColor":{"type":"string","default":""},"bodyBackgroundColor":{"type":"string","default":""}},"editorScript":["fs-tm-design-js","file:.\/index.js"],"style":"fs-tm-frontend-css","viewScript":"fs-tm-frontend-js"},"fstm\/fussball-widget":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"fstm\/fussball-widget","version":"1.2.0","title":"Spielplan & Tabelle","category":"fs-tm-blocks","icon":"calendar-alt","description":"Zeigt Spielplan oder Tabelle einer Mannschaft \u00fcber ein Widget von fussball.de an.","textdomain":"fabriel-team-manager","attributes":{"team":{"type":"string","default":"auto"},"view":{"type":"string","default":"matches"},"period":{"type":"string","default":"current"},"showTeamName":{"type":"boolean","default":true},"colorScheme":{"type":"string","default":""},"backgroundColor":{"type":"string","default":""},"textColor":{"type":"string","default":""},"bodyBackgroundColor":{"type":"string","default":""}},"editorScript":["fs-tm-design-js","file:.\/index.js"],"style":"fs-tm-frontend-css","viewScript":"fs-tm-frontend-js"}},"tagged_versions":["1.2.2","1.2.3","1.2.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3698992,"resolution":"1","location":"assets","locale":"","width":1280,"height":600},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3698992,"resolution":"2","location":"assets","locale":"","width":1110,"height":600},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3698992,"resolution":"3","location":"assets","locale":"","width":1005,"height":728},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3698992,"resolution":"4","location":"assets","locale":"","width":1005,"height":754},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3698992,"resolution":"5","location":"assets","locale":"","width":707,"height":619}},"screenshots":{"1":"Zentrale Verwaltung: Mannschaften konfigurieren, Zeitr\u00e4ume festlegen und IDs f\u00fcr Spielplan und Tabelle pflegen.","2":"Integrierter Widget-Inspector: Responsive Live-Vorschau der fussball.de-Widgets f\u00fcr Desktop-, Tablet- und Smartphone-Ansicht direkt im Backend.","3":"Block-Editor: Intuitive Einrichtung des Blocks \u201eSpielplan &amp; Tabelle\u201c mit automatischer Erkennung der zugewiesenen Unterseite.","4":"Darstellung im Frontend: Fertig gerenderte Ligatabelle mit direktem Saisonarchiv \u00fcber komfortable Dropdown-Auswahl.","5":"DSGVO Zwei-Klick-L\u00f6sung: Integrierter Platzhalter, der externe iFrames von fussball.de blockiert, bis der Besucher explizit zustimmt."}},"plugin_section":[],"plugin_tags":[4121,30581,1239,4776,1240],"plugin_category":[37],"plugin_contributors":[281108],"plugin_business_model":[],"class_list":["post-361650","plugin","type-plugin","status-publish","hentry","plugin_tags-blocks","plugin_tags-fussball","plugin_tags-soccer","plugin_tags-sports","plugin_tags-tables","plugin_category-arts-and-entertainment","plugin_contributors-fabrielsoftware","plugin_committers-fabrielsoftware"],"banners":{"banner":"https:\/\/ps.w.org\/fabriel-team-manager\/assets\/banner-772x250.png?rev=3698992","banner_2x":"https:\/\/ps.w.org\/fabriel-team-manager\/assets\/banner-1544x500.png?rev=3698992","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/fabriel-team-manager\/assets\/icon-128x128.png?rev=3698992","icon_2x":"https:\/\/ps.w.org\/fabriel-team-manager\/assets\/icon-256x256.png?rev=3698992","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/fabriel-team-manager\/assets\/screenshot-1.png?rev=3698992","caption":"Zentrale Verwaltung: Mannschaften konfigurieren, Zeitr\u00e4ume festlegen und IDs f\u00fcr Spielplan und Tabelle pflegen."},{"src":"https:\/\/ps.w.org\/fabriel-team-manager\/assets\/screenshot-2.png?rev=3698992","caption":"Integrierter Widget-Inspector: Responsive Live-Vorschau der fussball.de-Widgets f\u00fcr Desktop-, Tablet- und Smartphone-Ansicht direkt im Backend."},{"src":"https:\/\/ps.w.org\/fabriel-team-manager\/assets\/screenshot-3.png?rev=3698992","caption":"Block-Editor: Intuitive Einrichtung des Blocks \u201eSpielplan &amp; Tabelle\u201c mit automatischer Erkennung der zugewiesenen Unterseite."},{"src":"https:\/\/ps.w.org\/fabriel-team-manager\/assets\/screenshot-4.png?rev=3698992","caption":"Darstellung im Frontend: Fertig gerenderte Ligatabelle mit direktem Saisonarchiv \u00fcber komfortable Dropdown-Auswahl."},{"src":"https:\/\/ps.w.org\/fabriel-team-manager\/assets\/screenshot-5.png?rev=3698992","caption":"DSGVO Zwei-Klick-L\u00f6sung: Integrierter Platzhalter, der externe iFrames von fussball.de blockiert, bis der Besucher explizit zustimmt."}],"raw_content":"<!--section=description-->\n<p><strong>Einmal zentral erfassen statt jedes Jahr m\u00fchsam suchen und verteilen.<\/strong><\/p>\n\n<p><strong>Das Problem bisher:<\/strong>\nVereinswebmaster m\u00fcssen, wenn sie die offiziellen kostenlosen Widgets von fussball.de nutzen m\u00f6chten, auf jeder Mannschaftsseite Widgets separat pflegen. Bei Tabellen-Widgets muss mit jeder neuen Saison ein neues Widget angelegt und hinterlegt werden. Das bedeutet: Jede Saison f\u00fcr 10 bis 20 Mannschaften (Herren, Frauen, Jugend) jeweils ein oder zwei kryptische, rein IT-technische Widgets mit 36-stelligen UUIDs auf 20 verschiedenen WordPress-Unterseiten von Hand austauschen \u2013 meist sp\u00e4tabends im Ehrenamt, fehleranf\u00e4llig und hektisch kurz vor dem ersten Spieltag.<\/p>\n\n<p><strong>Die L\u00f6sung:<\/strong>\nEine zentrale Schaltzentrale im WordPress-Backend: Alle Teams, Zeitr\u00e4ume und IDs werden an einem einzigen Ort gepflegt. Auf den Unterseiten liegt lediglich ein eingebundener Block \u2013 ganz ohne manuelle Auswahl einer kryptischen ID oder dergleichen. Die Website erledigt den Rest vollautomatisch.<\/p>\n\n<h4>Die f\u00fcnf wichtigsten Vorteile (Der Riesengewinn)<\/h4>\n\n<p><strong>1. Ein zentraler Ort statt 20 Einzelseiten:<\/strong> Mannschaften, Widget-IDs und Zeitr\u00e4ume werden geb\u00fcndelt an einer Stelle verwaltet. Die zwei intelligenten Gutenberg-Bl\u00f6cke holen sich die passenden Daten selbstst\u00e4ndig.<\/p>\n\n<p><strong>2. Den Saisonwechsel vorbereiten statt durchleiden:<\/strong> Neue IDs werden einfach mit einem Startdatum versehen \u2013 Wochen im Voraus und in aller Ruhe. Am Stichtag stellt die Website vollautomatisch und punktgenau um. Niemand muss mehr um Mitternacht vor dem Computer sitzen, um den Saisonwechsel live zu schalten.<\/p>\n\n<p><strong>3. Tippfehler verhindern statt reparieren:<\/strong> Jede ID wird bereits bei der Eingabe auf das g\u00fcltige Format (UUID) gepr\u00fcft. \u00dcber den integrierten Widget-Inspector l\u00e4sst sich jedes Widget direkt im Backend auf Desktop-, Tablet- und Smartphone-Breite live testen.<\/p>\n\n<p><strong>4. Routinearbeit wird zu echtem Mehrwert (Automatisches Saisonarchiv):<\/strong> Da abgelaufene Zeitr\u00e4ume erhalten bleiben, entsteht im Frontend ganz von allein ein Archiv: Besucher k\u00f6nnen direkt \u00fcber der Tabelle zwischen aktueller Saison, Vorsaison oder Hin- und R\u00fcckrunde umschalten \u2013 ohne jeden zus\u00e4tzlichen Pflegeschritt f\u00fcr den Webmaster.<\/p>\n\n<p><strong>5. Bl\u00f6cke einmal einrichten und nie wieder anfassen:<\/strong> Sobald einer Mannschaft eine WordPress-Seite zugewiesen ist, erkennt der Block automatisch, auf welcher Seite er sich befindet. Dieselbe Block-Konfiguration funktioniert universell auf allen Mannschaftsseiten.<\/p>\n\n<h4>Funktionen im \u00dcberblick<\/h4>\n\n<p><strong>Mannschaftsverwaltung<\/strong>\n* Beliebig viele Mannschaften anlegen und verwalten\n* Reihenfolge komfortabel per Drag &amp; Drop sortieren\n* Schnelle Live-Suche \u00fcber alle Mannschaften\n* Zuordnung einer WordPress-Seite pro Team (f\u00fcr automatische Block-Erkennung)\n* Schutz vor Datenverlust bei ungespeicherten Eingaben<\/p>\n\n<p><strong>Zeitraum-Steuerung<\/strong>\n* Beliebig viele Zeitr\u00e4ume pro Team (z. B. Saison 2026\/2027, Hinrunde, R\u00fcckrunde)\n* Getrennte Widget-IDs f\u00fcr Spielplan und Tabelle je Zeitraum\n* Flexibles Umschalten zwischen Mannschafts- und Vereinsspielplan\n* Automatische, datumsgesteuerte Aktivierung (Stichtag)\n* Klare Warnhinweise mit optischer Hervorhebung bei \u00fcberlappenden oder fehlenden Enddaten\n* Intelligenter Fallback: Ist f\u00fcr das heutige Datum kein Zeitraum aktiv, wird automatisch der letzte g\u00fcltige Stand mit einem dezenten Hinweis angezeigt \u2013 die Vereinsseite bleibt niemals leer<\/p>\n\n<p><strong>Zwei native Gutenberg-Bl\u00f6cke<\/strong>\n* <em>Spielplan &amp; Tabelle<\/em>: Feste Mannschaftsauswahl oder vollautomatische Seitenerkennung, direktes Umschalten zwischen Spielplan und Tabelle, w\u00e4hlbarer Start-Zeitraum, frei anpassbare Farben f\u00fcr Kopf- und Inhaltsbereich.\n* <em>Tabellen-\u00dcbersicht (Grid)<\/em>: Alle aktuellen Ligatabellen der Mannschaften \u00fcbersichtlich in 1, 2 oder 3 Spalten im Raster dargestellt. Mannschaften, die in derselben Liga spielen, werden automatisch in einer gemeinsamen Karte geb\u00fcndelt, statt doppelt zu erscheinen.\n* Direkte Verlinkung der jeweiligen Mannschaftsseite im Kartentitel.\n* Einheitliche Kartenh\u00f6hen im Raster, vollkommen responsiv bis zum Smartphone.<\/p>\n\n<p><strong>Kontrolle, Datenschutz und Sicherheit<\/strong>\n* Live-Vorschau mit nativer Ger\u00e4tesimulation (Desktop, Tablet, Smartphone) direkt im Backend.\n* Vollst\u00e4ndiges JSON-Backup aller Daten mit einem Klick.\n* Wiederherstellung wahlweise additiv (erg\u00e4nzend) oder ersetzend, inklusive Ein-Klick-Wiederherstellungspunkt (Undo).\n* DSGVO-konforme Zwei-Klick-L\u00f6sung: Externe Inhalte von fussball.de werden erst nach ausdr\u00fccklicher Best\u00e4tigung durch den Seitenbesucher geladen.\n* Vollst\u00e4ndige Anbindung an g\u00e4ngige Consent-Management-Plugins (z. B. Complianz, Borlabs Cookie, Real Cookie Banner) \u00fcber eine sauber dokumentierte Filterschnittstelle (<code>fs_tm_load_remote_widgets<\/code>).\n* Optionaler Credit-Hinweis unter den Karten: standardm\u00e4\u00dfig vollst\u00e4ndig deaktiviert (Opt-in) \u2013 kein unerw\u00fcnschter Backlink auf Ihrer Website.\n* Saubere und r\u00fcckstandsfreie Deinstallation.<\/p>\n\n<p><strong>Unsere Qualit\u00e4tsversprechen<\/strong>\n* Kein Benutzerkonto, keine Registrierung, keine Aktivierungsschl\u00fcssel n\u00f6tig.\n* Das Plugin selbst sendet keinerlei Daten an uns.\n* Eigene Skripte und Styles werden ausschlie\u00dflich auf den Seiten geladen, die tats\u00e4chlich einen Plugin-Block enthalten.\n* Vollst\u00e4ndig \u00fcbersetzbar (vollst\u00e4ndige Textdomain-Integration).<\/p>\n\n<h4>F\u00fcr wen ist dieses Plugin gedacht?<\/h4>\n\n<p>F\u00fcr alle Fu\u00dfballvereine mit mehr als zwei Mannschaften, die ihre Website eigenst\u00e4ndig pflegen. Der Zeitgewinn und die Entlastung wachsen mit jeder weiteren Mannschaft. Ebenso ideal f\u00fcr Agenturen und Webmaster, die mehrere Vereins-Websites betreuen und administrative Routinearbeiten minimieren m\u00f6chten.<\/p>\n\n<h4>Hilfe direkt im Plugin<\/h4>\n\n<p>Unter \u201eFabriel Software &gt; Einstellungen\u201c finden Sie das integrierte \u201eHandbuch &amp; die Feld-Referenz\u201c. Dort wird jedes Eingabefeld detailliert erl\u00e4utert: was eingegeben werden muss, welche Wechselwirkungen bestehen und wo sich die jeweilige Einstellung im Gutenberg-Editor sowie im Frontend auswirkt.<\/p>\n\n<p><strong>Markenhinweis<\/strong><\/p>\n\n<p>Dieses Plugin ist ein unabh\u00e4ngiges Open-Source-Produkt. Es steht in keiner gesch\u00e4ftlichen Verbindung zum Deutschen Fu\u00dfball-Bund e.V. (DFB) oder den Betreibern der Plattform fussball.de und wird von diesen weder unterst\u00fctzt noch gesponsert. Alle genannten Marken und Produktnamen sind Eigentum der jeweiligen Inhaber und dienen ausschlie\u00dflich der Beschreibung der technischen Kompatibilit\u00e4t.<\/p>\n\n<h3>External services<\/h3>\n\n<p>Dieses Plugin bindet Spielpl\u00e4ne und Ligatabellen \u00fcber den externen Dienst <strong>fussball.de<\/strong> ein. Ohne diesen Dienst kann das Plugin keine Spieldaten darstellen.<\/p>\n\n<p><strong>Wann werden Daten \u00fcbertragen?<\/strong><\/p>\n\n<ul>\n<li>Im Frontend: Sobald eine Seite aufgerufen wird, die einen Block des Plugins enth\u00e4lt und f\u00fcr die eine g\u00fcltige Widget-ID hinterlegt ist.<\/li>\n<li>Im Backend: Wenn eine Widget-ID \u00fcber die Schaltfl\u00e4che \u201eTesten\u201c in der Vorschau ge\u00f6ffnet wird.<\/li>\n<\/ul>\n\n<p><strong>Welche Daten werden \u00fcbertragen?<\/strong><\/p>\n\n<ul>\n<li>Die IP-Adresse des Besuchers<\/li>\n<li>Der User-Agent des Browsers sowie technische Verbindungsdaten<\/li>\n<li>Die im Plugin hinterlegte Widget-ID und der Widget-Typ<\/li>\n<\/ul>\n\n<p>Es wird das Skript <code>https:\/\/www.fussball.de\/widgets.js<\/code> geladen sowie die durch dieses Skript eingebettete Ansicht unter <code>https:\/\/next.fussball.de\/<\/code>.<\/p>\n\n<p>Dienstanbieter: DFB GmbH &amp; Co. KG, fussball.de \u2013 https:\/\/www.fussball.de\/\nNutzungsbedingungen: https:\/\/www.fussball.de\/terms-of-use.action\nDatenschutzerkl\u00e4rung: https:\/\/www.fussball.de\/privacy-policy.action<\/p>\n\n<p>Website-Betreiber sind daf\u00fcr verantwortlich, die Einbindung dieses Dienstes in ihrer Datenschutzerkl\u00e4rung aufzuf\u00fchren. Mit der Option \u201eZwei-Klick-L\u00f6sung aktivieren\u201c werden externe Inhalte erst nach vorheriger Zustimmung durch den Besucher geladen. Zudem kann das Laden \u00fcber den PHP-Filter <code>fs_tm_load_remote_widgets<\/code> vollst\u00e4ndig unterbunden und somit an ein Consent-Management-Plugin gekoppelt werden.<\/p>\n\n<h3>Source code &amp; development<\/h3>\n\n<p>Dieses Plugin enth\u00e4lt keinen verschleierten, minifizierten oder auf sonstige Weise unlesbaren Code ohne Quelldatei. Zu jeder kompilierten Datei im Ordner <code>build\/<\/code> liegt das lesbare Gegenst\u00fcck im Ordner <code>src\/<\/code> bei, und beide sind im ausgelieferten Paket enthalten:<\/p>\n\n<ul>\n<li><code>build\/admin.js<\/code> und <code>build\/admin.css<\/code> \u2190 <code>src\/admin\/admin.js<\/code>, <code>src\/admin\/admin.scss<\/code><\/li>\n<li><code>build\/frontend.js<\/code> und <code>build\/frontend.css<\/code> \u2190 <code>src\/frontend\/frontend.js<\/code>, <code>src\/frontend\/frontend.scss<\/code><\/li>\n<li><code>build\/blocks\/fussball-widget\/index.js<\/code> \u2190 <code>src\/blocks\/fussball-widget\/index.js<\/code>, <code>edit.js<\/code>, <code>block.json<\/code><\/li>\n<li><code>build\/blocks\/tables-overview\/index.js<\/code> \u2190 <code>src\/blocks\/tables-overview\/index.js<\/code>, <code>edit.js<\/code>, <code>block.json<\/code><\/li>\n<\/ul>\n\n<p>Jede generierte JavaScript-Datei tr\u00e4gt einen Kopfkommentar, der die Quelldatei und das \u00f6ffentliche Repository ausweist.<\/p>\n\n<p>\u00d6ffentliches Quellcode-Repository (vollst\u00e4ndiger Code, Build-Tools und Historie):\nhttps:\/\/github.com\/gaboofry\/fs-team-manager<\/p>\n\n<p>Klonen mit: <code>git clone https:\/\/github.com\/gaboofry\/fs-team-manager.git<\/code><\/p>\n\n<h4>Build-Werkzeuge und Schritte zur Neuerstellung<\/h4>\n\n<p>Die Build-Konfiguration ist dem Plugin beigelegt: <code>package.json<\/code>, <code>package-lock.json<\/code> und <code>webpack.config.js<\/code>.<\/p>\n\n<ol>\n<li>Abh\u00e4ngigkeiten exakt installieren: <code>npm ci<\/code> (oder <code>npm install<\/code>)<\/li>\n<li>JavaScript, SCSS und Block-Assets nach <code>build\/<\/code> kompilieren: <code>npm run build<\/code><\/li>\n<li>Optional: \u00dcbersetzungsvorlage mit WP-CLI aktualisieren: <code>wp i18n make-pot . languages\/fabriel-team-manager.pot --slug=fabriel-team-manager --domain=fabriel-team-manager --exclude=node_modules,vendor,src<\/code><\/li>\n<\/ol>\n\n<p>Der Build basiert auf <code>@wordpress\/scripts<\/code> (webpack + Babel + Dart Sass); es wird kein weiteres Build-System ben\u00f6tigt. Das Repository enth\u00e4lt zudem die fertigen Skripte <code>build.sh<\/code> (Linux\/macOS) und <code>build.ps1<\/code> (Windows), die den kompletten Build durchf\u00fchren und das fertige Distributions-ZIP schn\u00fcren. Diese Skripte geh\u00f6ren nicht zum ausgelieferten Plugin; klonen Sie daf\u00fcr das Repository.<\/p>\n\n<h4>Verzeichnis-Assets (Banner, Screenshots)<\/h4>\n\n<p>Banner- und Screenshot-Grafiken sind nicht Bestandteil des installierbaren Plugin-Pakets. Sie befinden sich im Verzeichnis <code>.wordpress-org\/<\/code> des Quellcode-Repositories und geh\u00f6ren in den <code>assets\/<\/code>-Ordner des WordPress.org-SVN-Repositories, damit sie beim normalen Plugin-Download nicht unn\u00f6tig heruntergeladen werden.<\/p>\n\n<h4>Drittanbieter-Bibliotheken<\/h4>\n\n<p>Das Plugin b\u00fcndelt keinerlei externe JavaScript- oder PHP-Bibliotheken von Drittanbietern. Der Ordner <code>build\/<\/code> enth\u00e4lt ausschlie\u00dflich aus <code>src\/<\/code> kompilierten Code sowie die Webpack-Laufzeitumgebung von <code>@wordpress\/scripts<\/code> (GPL-2.0-or-later, https:\/\/github.com\/WordPress\/gutenberg\/tree\/trunk\/packages\/scripts). Alle von den Bl\u00f6cken genutzten WordPress-Pakete (<code>wp.blocks<\/code>, <code>wp.blockEditor<\/code>, <code>wp.components<\/code>, <code>wp.i18n<\/code>, <code>wp.element<\/code>) werden direkt von WordPress als registrierte Skript-Abh\u00e4ngigkeiten bezogen. Das externe Skript <code>https:\/\/www.fussball.de\/widgets.js<\/code> wird direkt vom Anbieter geladen und ist nicht Teil dieses Pakets (siehe \u201eExternal services\u201c).<\/p>\n\n<h3>Security<\/h3>\n\n<p>Die \u00f6ffentlichen Block-Filter <code>fs_tm_widget_card_html<\/code>, <code>fs_tm_tables_overview_html<\/code>, <code>fs_tm_card_body_before<\/code> und <code>fs_tm_card_body_after<\/code> dienen als Erweiterungspunkte f\u00fcr Add-ons. Filter-Callbacks erhalten das vollst\u00e4ndig maskierte HTML und d\u00fcrfen ausschlie\u00dflich maskiertes HTML zur\u00fcckgeben. Alle dynamischen Werte werden vor Ausf\u00fchrung der Filter mit <code>esc_html()<\/code>, <code>esc_attr()<\/code> oder <code>esc_url()<\/code> abgesichert. Der finale R\u00fcckgabewert der Render-Callbacks \u2013 inklusive aller durch Filter erg\u00e4nzten Elemente \u2013 durchl\u00e4uft als letzte Verteidigungslinie <code>wp_kses()<\/code> mit der plugin-eigenen Positivliste (<code>fs_tm_allowed_card_html<\/code>). Diese Liste erweitert <code>wp_kses_allowed_html( 'post' )<\/code> gezielt um die f\u00fcr die Karten erforderlichen Elemente (<code>template<\/code>, <code>select<\/code>, <code>option<\/code>, <code>optgroup<\/code>, <code>input<\/code>), da <code>wp_kses_post()<\/code> diese Elemente stillschweigend entfernen w\u00fcrde.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Laden Sie das Plugin \u00fcber das WordPress-Dashboard unter \u201ePlugins &gt; Installieren\u201c hoch und aktivieren Sie es.<\/li>\n<li>\u00d6ffnen Sie im Administrationsmen\u00fc den Men\u00fcpunkt \u201eFabriel Software &gt; Teams &amp; Widgets\u201c.<\/li>\n<li>Legen Sie eine Mannschaft an und weisen Sie ihr optional die passende WordPress-Unterseite zu.<\/li>\n<li>Tragen Sie die Widget-IDs aus dem fussball.de-Einbindungscode in den Zeitraum ein.<\/li>\n<li>F\u00fcgen Sie auf den gew\u00fcnschten Seiten den Block \u201eSpielplan &amp; Tabelle\u201c oder \u201eTabellen-\u00dcbersicht (Grid)\u201c ein.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"woher%20erhalte%20ich%20die%20widget-ids%3F\"><h3>Woher erhalte ich die Widget-IDs?<\/h3><\/dt>\n<dd><p>Die IDs befinden sich im Einbindungscode, den fussball.de f\u00fcr das jeweilige Widget generiert. Es handelt sich um den Wert des Attributs <code>data-id<\/code>, eine UUID im Format <code>01234567-89ab-cdef-0123-456789abcdef<\/code>.<\/p><\/dd>\n<dt id=\"was%20geschieht%2C%20wenn%20f%C3%BCr%20das%20heutige%20datum%20kein%20zeitraum%20konfiguriert%20ist%3F\"><h3>Was geschieht, wenn f\u00fcr das heutige Datum kein Zeitraum konfiguriert ist?<\/h3><\/dt>\n<dd><p>Das Plugin zeigt automatisch den letzten g\u00fcltigen Zeitraum an und markiert diesen in der Kopfzeile der Karte dezent mit dem Hinweis \u201eLetzter Zeitraum\u201c. So bleibt die Seite niemals leer.<\/p><\/dd>\n<dt id=\"werden%20meine%20daten%20bei%20einem%20import%20%C3%BCberschrieben%3F\"><h3>Werden meine Daten bei einem Import \u00fcberschrieben?<\/h3><\/dt>\n<dd><p>Nur, wenn Sie explizit den Modus \u201eErsetzen\u201c w\u00e4hlen. Der Standardmodus lautet \u201eHinzuf\u00fcgen\u201c (bestehende Teams bleiben erhalten). In beiden F\u00e4llen sichert das Plugin den vorherigen Zustand automatisch, sodass Sie den Stand direkt nach dem Import mit einem Klick wiederherstellen k\u00f6nnen.<\/p><\/dd>\n<dt id=\"welche%20daten%20speichert%20das%20plugin%20in%20der%20datenbank%3F\"><h3>Welche Daten speichert das Plugin in der Datenbank?<\/h3><\/dt>\n<dd><p>Mannschaften werden als interner Post-Type <code>fs_tm_team<\/code> gespeichert; Seitenzuordnung und Zeitr\u00e4ume liegen als Post-Meta vor. Zus\u00e4tzlich existieren die Optionen <code>fs_tm_version<\/code>, <code>fs_tm_click_to_load<\/code> und <code>fs_tm_teams_restore_point<\/code> sowie ein Transient f\u00fcr die Seitenliste. S\u00e4mtliche Eintr\u00e4ge werden bei einer Deinstallation des Plugins vollst\u00e4ndig und sauber gel\u00f6scht.<\/p><\/dd>\n<dt id=\"ich%20habe%20von%20einer%20%C3%A4lteren%20version%20aktualisiert.%20muss%20ich%20etwas%20tun%3F\"><h3>Ich habe von einer \u00e4lteren Version aktualisiert. Muss ich etwas tun?<\/h3><\/dt>\n<dd><p>Nein. Beim ersten Seitenaufruf nach dem Update werden die Daten automatisch in das aktuelle Datenformat migriert. Der fr\u00fchere Zustand wird zur Sicherheit zus\u00e4tzlich in der Option <code>fs_tm_teams_pre_cpt<\/code> vorgehalten. Dennoch empfehlen wir vor jedem Update ein Backup.<\/p><\/dd>\n<dt id=\"wie%20verbinde%20ich%20das%20plugin%20mit%20einem%20consent-management-plugin%20wie%20complianz%3F\"><h3>Wie verbinde ich das Plugin mit einem Consent-Management-Plugin wie Complianz?<\/h3><\/dt>\n<dd><p>Es stehen drei Integrationswege zur Verf\u00fcgung, die sich auch kombinieren lassen:<\/p>\n\n<ol>\n<li><strong>Integrierte Zwei-Klick-L\u00f6sung:<\/strong> Aktivieren Sie diese unter \u201eFabriel Software &gt; Einstellungen &gt; Datenschutz &amp; externe Inhalte\u201c. Die Entscheidung wird lokal im Browser gespeichert und funktioniert daher auch hinter einem Page-Cache.<\/li>\n<li><p><strong>Filter <code>fs_tm_load_remote_widgets<\/code> (Empfohlen):<\/strong> Dieser Filter wird vor dem Rendern jedes Widgets ausgewertet. Gibt er <code>false<\/code> zur\u00fcck, werden weder der Widget-Container noch die Zwei-Klick-Box ausgegeben, und das Skript von fussball.de wird gar nicht erst registriert \u2013 es geht keine Anfrage an fussball.de. Beispiel f\u00fcr Complianz:<\/p>\n\n<p>add_filter( 'fs_tm_load_remote_widgets', function ( $enabled ) { return function_exists( 'cmplz_has_consent' ) ? (bool) cmplz_has_consent( 'marketing' ) : $enabled; } );<\/p>\n\n<p>Da der Filter beim Seitenaufbau serverseitig greift, kombinieren Sie ihn bitte mit einem Cache, der nach Consent-Status unterscheidet \u2013 oder nutzen Sie die integrierte Zwei-Klick-L\u00f6sung.<\/p><\/li>\n<li><strong>Skript-Blockierung durch das Consent-Plugin:<\/strong> Ohne Zwei-Klick-L\u00f6sung wird das Skript regul\u00e4r eingereiht (Handle <code>fussballde-widgets<\/code>), sodass Skript-Blocker es erkennen. Wird das Skript blockiert, erkennt das Plugin dies und unterbindet auch beim nachtr\u00e4glichen Umschalten zwischen Zeitr\u00e4umen eigenst\u00e4ndige Ladeversuche.<\/li>\n<\/ol>\n\n<p>Vollst\u00e4ndige Code-Beispiele f\u00fcr Complianz, Borlabs Cookie und Real Cookie Banner finden Sie in der Datei <code>docs\/CONSENT-MANAGEMENT.md<\/code> im Quellcode-Repository.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Behoben: Im Block \u201eSpielplan &amp; Tabelle\u201c lie\u00df sich im Blockeditor keine Mannschaft ausw\u00e4hlen \u2013 die Auswahl zeigte nur \u201eAutomatisch (anhand Seite)\u201c. Die Editordaten und \u00dcbersetzungen wurden an einen falschen Skript-Handle \u00fcbergeben; der Handle wird jetzt aus dem registrierten Block ermittelt.<\/li>\n<li>Behoben: Die Editor\u00fcbersetzungen des Blocks \u201eTabellen-\u00dcbersicht (Grid)\u201c wurden aus demselben Grund nicht geladen.<\/li>\n<li>Ge\u00e4ndert: Mindestversion ist jetzt WordPress 6.1. Die Bl\u00f6cke binden mehrere Editor-Skripte ein, was WordPress erst ab Version 6.1 unterst\u00fctzt.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Behoben: Bei deaktivierter Zwei-Klick-L\u00f6sung wurde jeder Spielplan und jede Tabelle doppelt eingebunden \u2013 das Anbieterskript wurde vom Frontend-Skript ein zweites Mal geladen, obwohl WordPress es bereits eingereiht hatte.<\/li>\n<li>Neu: Kleine animierte Ladeanzeige im Design des Plugins w\u00e4hrend des Ladens von Spielplan oder Tabelle von fussball.de.<\/li>\n<li>Ge\u00e4ndert: In der Zwei-Klick-Box steht die Checkbox \u201eAuswahl f\u00fcr diesen Browser merken\u201c nun vor dem Button \u201eInhalt laden\u201c; der Button zeigt w\u00e4hrend des Einf\u00fcgens einen Ladespinner.<\/li>\n<li>Ge\u00e4ndert: Der aktive Men\u00fcbereich wird nach dem Umschalten zwischen den Seiten des Plugins nun auch im WordPress-Untermen\u00fc korrekt hervorgehoben.<\/li>\n<li>Ge\u00e4ndert: Neutralisiert ein Consent-Management-Plugin das Anbieterskript, bindet das Plugin beim Wechsel von Zeitr\u00e4umen keine Inhalte mehr eigenm\u00e4chtig ein.<\/li>\n<li>Verbessert: H\u00f6henanpassungen (Resize-Messages) des eingebetteten Inhalts werden jetzt von einem zentralen Listener verarbeitet, der den Ursprung (Origin) des Senders validiert.<\/li>\n<li>Verbessert: Dokumentierte Integration f\u00fcr Consent-Management-Plugins (Complianz, Borlabs Cookie, Real Cookie Banner) in der FAQ, im Handbuch und in <code>docs\/CONSENT-MANAGEMENT.md<\/code>.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Ge\u00e4ndert: Der Hinweis \u201eEingebunden durch Fabriel Software Teammanager\u201c unter jeder Karte ist jetzt Opt-in und standardm\u00e4\u00dfig deaktiviert (WordPress.org Plugin-Richtlinie 10); der Link zum Zur\u00fccksetzen der Einwilligung bei der Zwei-Klick-L\u00f6sung bleibt davon unber\u00fchrt.<\/li>\n<li>Ge\u00e4ndert: Hochgeladene Backup-Dateien werden \u00fcber die WordPress-Filesystem-API statt \u00fcber <code>file_get_contents()<\/code> eingelesen.<\/li>\n<li>Ge\u00e4ndert: Banner- und Screenshot-Grafiken sind nicht mehr Teil des Plugin-Pakets; sie geh\u00f6ren in das <code>assets\/<\/code>-Verzeichnis des WordPress.org-SVN-Repositories.<\/li>\n<li>Verbessert: Jeder Wert eines Uploads wird vor der Verarbeitung einzeln auf Existenz und G\u00fcltigkeit gepr\u00fcft (Sanitization).<\/li>\n<li>Behoben: Ung\u00fcltiger Header <code>Banner tag:<\/code> sowie nicht standardkonforme Screenshot-Notationen aus der Readme entfernt.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Neu: Eigene Seite \u201eEinstellungen\u201c \u2013 Datenschutz, Backup und Handbuch dorthin aus \u201eTeams &amp; Widgets\u201c ausgelagert.<\/li>\n<li>Neu: Durchgehende Navigationsleiste mit Markenbereich, Men\u00fcabschnitten und Support-Link; der separate Kopfbereich entf\u00e4llt.<\/li>\n<li>Neu: Seitenwechsel und Speichern laden jetzt nur noch den Inhaltsbereich neu statt der gesamten Seite.<\/li>\n<li>Neu: Benachrichtigungen erscheinen als schwebende Toasts und verschieben nicht mehr das Seitenlayout.<\/li>\n<li>Verbessert: Hilfetexte werden an den Kartenr\u00e4ndern nicht mehr abgeschnitten.<\/li>\n<li>Verbessert: Beim \u00d6ffnen einer Mannschaft ist zun\u00e4chst nur \u201eStammdaten &amp; Zuordnung\u201c aufgeklappt.<\/li>\n<li>Neu: Erweiterungspunkte f\u00fcr Add-ons (<code>fs_tm_admin_pages<\/code>, <code>fs_tm_admin_toolbar<\/code>, <code>fs_tm_admin_header_actions<\/code>, <code>fs_tm_admin_footer_links<\/code>, <code>fs_tm_admin_version_label<\/code>, <code>fs_tm_admin_notices<\/code>, <code>fs_tm_settings_sections<\/code>, <code>fs_tm_settings_sections_before<\/code>, <code>fs_tm_show_core_backup<\/code>, <code>fs_tm_team_edit_sections_before<\/code>, <code>fs_tm_team_form_saved<\/code>).<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Ge\u00e4ndert: Mannschaften werden als eigener interner Post-Type gespeichert statt in einer einzelnen Option; die Migration erfolgt automatisch und der alte Stand bleibt gesichert.<\/li>\n<li>Neu: Erweiterungspunkte f\u00fcr Add-ons (<code>fs_tm_capability<\/code>, <code>fs_tm_addon_active<\/code>, <code>fs_tm_widget_card_html<\/code>, <code>fs_tm_card_body_before<\/code>, <code>fs_tm_card_body_after<\/code>, <code>fs_tm_tables_overview_html<\/code>, <code>fs_tm_sanitize_period<\/code>, <code>fs_tm_team_data<\/code>, <code>fs_tm_team_saved<\/code>, <code>fs_tm_before_team_deleted<\/code>).<\/li>\n<li>Verbessert: Mannschaften werden nur noch einmal pro Seitenaufruf geladen und im Object-Cache gehalten.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Neu: Zwei-Klick-L\u00f6sung f\u00fcr externe Inhalte inklusive Filter <code>fs_tm_load_remote_widgets<\/code>.<\/li>\n<li>Neu: Import im Modus \u201eHinzuf\u00fcgen\u201c oder \u201eErsetzen\u201c mit einmaliger Wiederherstellung des vorherigen Zustands.<\/li>\n<li>Neu: Ist f\u00fcr heute kein Zeitraum hinterlegt, wird der letzte g\u00fcltige Zeitraum mit Hinweis angezeigt.<\/li>\n<li>Verbessert: Frontend-Assets werden nur noch geladen, wenn die Seite tats\u00e4chlich einen Block des Plugins enth\u00e4lt.<\/li>\n<li>Behoben: Validierungsfehler beim Speichern im Server f\u00fchrten zum Verwerfen der Eingaben; Eingaben bleiben nun erhalten.<\/li>\n<li>Sicherheit: Zus\u00e4tzliche Integrit\u00e4tspr\u00fcfungen beim JSON-Import.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Erstver\u00f6ffentlichung.<\/li>\n<\/ul>","raw_excerpt":"Zentrale Verwaltung von Mannschaften, Zeitr\u00e4umen, Spielpl\u00e4nen und Tabellen f\u00fcr Widgets von fussball.de.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=361650"}],"author":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fabrielsoftware"}],"wp:attachment":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361650"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361650"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361650"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361650"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361650"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}