Bildungsprogramm
Wordpress Plugin zur Darstellung des Bildungsprogramms der IG Metall.
by IG Metall Bildung · github.com/gibro/igm-bildungsprogramm · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/gibro/igm-bildungsprogramm/archive/refs/heads/main.zipReadme
IGM Bildungsprogramm
Eigenständiges WordPress-Plugin für Seminar- und Veranstaltungsprogramme: durchsuchbare Seminarliste mit Filterleiste, Online-Anmeldung mit automatischem Mail-Versand, CSV-Import und Marketing-Kacheln. Entwickelt für das Bildungsprogramm der IG Metall, aber ohne externe Abhängigkeiten und damit auf jeder WordPress-Installation einsetzbar – es werden keine Page-Builder- oder Formular-Plugins benötigt.
Inhalt
- Funktionen
- Voraussetzungen
- Installation
- Einrichtung
- Shortcodes
- Benachrichtigungen
- Verfügbarkeits-Ampel
- Kampagnen-Auswertung
- Die Detailseiten
- Ausbildungsreihen
- Der Import-Lauf
- Kosten und Orte ab Programm 2027
- Anmeldevarianten
- Anmeldeformulare
- Die drei Haken am Seminar
- Datenqualität
- Die Seminarliste im Backend
- Die Bearbeiten-Maske
- Eigene Datenfelder
- Datenpflege: Export und Umzug
- Abgleich mehrerer Websites
- Datenmodell
- Anpassung
- Aufbau des Codes
- Lizenz
Funktionen
-
Seminare als eigener Beitragstyp (
bi_seminar) – gepflegt mit der WordPress-eigenen Editier-Oberfläche, inklusive Start-/Enddatum, Seminarnummer, Plätzen, Kosten und Buchungsstatus. -
Online-Seminare als zweiter Beitragstyp (
bi_online) – eigenes Feldset (Untertitel, Referent*innen, Veranstalter*in, Webinar-Tool, Anmelde- und Teilnahme-Link), aber dieselben Taxonomien und dieselbe Darstellung im Frontend. Im Backend stehen sie gemeinsam mit den Präsenz-Seminaren unter „Seminare"; das Auswahlfeld Seminarform grenzt bei Bedarf ein. -
Such- & Filterleiste per Shortcode: Volltextsuche mit Autovervollständigung, Filter-Chips mit Mehrfachauswahl (echtes ODER), Datumsbereich mit Kalender, Live-Trefferzähler. Der Chip Seminarform trennt Präsenz- und Online-Seminare. Die Volltextsuche liest alle Datenfelder – Titel, Beschreibung, Themen, Seminarort, Referent*innen, Ansprechpartner*in, Seminarnummer, den Namen der Ausbildungsreihe und die Begriffe aller Filter-Chips. Alles zusammen steht in einer eigenen Indextabelle mit
FULLTEXT-Index. Wer mag, verknüpft mitODER,NICHT,"Wortgruppen"und Klammern — ohne Zutun bleibt es beim UND. -
Online-Anmeldung als vierstufiger Formular-Wizard; Anmeldungen werden in der Datenbank gespeichert und sind im Backend einsehbar.
-
Benachrichtigungen: beliebig viele Mails pro Anmeldung – an Teilnehmer*innen, die zuständige Geschäftsstelle (per PLZ-Zuordnung), das Bildungszentrum oder feste Adressen; mit Bedingungen und Platzhaltern.
-
CSV-Import für Seminare mit frei zuordenbaren Spalten (Mapping-Schritt mit Auto-Erkennung) – je ein eigener Tab für Präsenz- und Online-Seminare.
-
CSV-Import für PLZ → Geschäftsstelle (eigene Tabelle, schneller Lookup).
-
Marketing-Kacheln: Bild-/Text-Teaser, die auf die Suche mit vorbefüllten Filtern verlinken – inklusive Backend-Builder mit Live-Vorschau.
-
Verfügbarkeits-Ampel: auf der Detailseite steht neben dem Termin, ob er noch frei ist (Verfügbar / Fast ausgebucht / Warteliste möglich). Die Angabe wird nachts mit der Seminarsuche auf
igmetall.deabgeglichen und über die Seminarnummer zugeordnet. -
Kampagnen-Auswertung: eigene Links für Newsletter und Mailings, die den Weg vom Klick über die Seminaransicht bis zur abgeschickten Anmeldung nachvollziehbar machen.
-
Mini-Dashboard im Backend mit Kennzahlen, Warnhinweisen (z. B. fehlende E-Mail-Adressen) und Einrichtungs-Anleitung.
-
Abgleich mehrerer Websites – Sprockhövel und Berlin pflegen ihre Seminare selbst, bildung.igmetall.de holt sie ab. Kein iframe: Jede Website führt ihren eigenen Bestand und findet in der Suche nur ihn.
Voraussetzungen
| Version | |
|---|---|
| WordPress | ≥ 5.8 |
| PHP | ≥ 7.4 |
Keine weiteren Plugin-Abhängigkeiten. Der Datums-Kalender (flatpickr) wird mitgeliefert.
Installation
Aus dem Release (empfohlen):
- Aktuelles Release als ZIP herunterladen.
- Im WP-Adminbereich unter Plugins → Installieren → Plugin hochladen die
ZIP-Datei hochladen – oder den entpackten Ordner
igm-bildungsprogrammnachwp-content/plugins/kopieren. - Plugin unter Plugins aktivieren.
Aus dem Repository:
cd wp-content/plugins
git clone https://github.com/<user>/igm-bildungsprogramm.git
Beim Aktivieren werden die Tabellen wp_bi_plz, wp_bi_anmeldungen,
wp_bi_kampagnen und wp_bi_events angelegt, der Beitragstyp registriert und
drei Standard-Benachrichtigungen erstellt. Deaktivieren und Löschen entfernt keine Daten.
Einrichtung
Alle Schritte finden sich auch im Backend unter Bildungsprogramm → Übersicht.
- PLZ importieren – Einstellungen → Tab „PLZ-Import": CSV mit den Spalten
PLZ,Geschäftsstelle,E-Mail(Trennzeichen,oder;wird automatisch erkannt). - Seminare importieren – Einstellungen → Tab „Seminar-Import": CSV
hochladen, im zweiten Schritt jede Spalte einem Feld zuordnen. Der Import
läuft anschließend in Häppchen mit Fortschrittsbalken und Zähler. Mehrfach-Felder
(Zielgruppe, Freistellung) dürfen mehrere Werte je Zelle enthalten, getrennt
mit
|oder,. Alternativ lassen sich Seminare komplett von Hand anlegen. - Bildungszentren-Mails – unter Seminare → Bildungszentrum je Eintrag eine E-Mail-Adresse hinterlegen (für den Trigger „Mail an Bildungszentrum").
- Benachrichtigungen prüfen und anpassen – gleichnamiger Menüpunkt.
- Such-Seite anlegen mit
[bi_seminarsuche]. - Anmelde-Seite anlegen mit
[bi_anmeldung]. - Unter Einstellungen → Seiten die beiden Seiten zuordnen (oder die automatische Erkennung nutzen) und die Anmeldevarianten konfigurieren.
- Optional: unter Kampagnen je Newsletter einen Link anlegen, wenn die Wirkung von Mailings ausgewertet werden soll.
Shortcodes
| Shortcode | Zweck | Attribute |
|---|---|---|
[bi_seminarsuche] |
Such-/Filterleiste + Ergebnisliste | anmeldung_url, per_page (Vorgabe, Standard 20), pro_seite (wählbare Stufen, Standard 10\|20\|50\|100, nein = keine Wahl), programm, form (praesenz/online) |
[bi_suchmaske] |
Nur die Suchmaske, ohne Ergebnisliste – Button springt auf die Übersicht | ziel_url, button, titel, kicker, hinweis, programm, form |
[bi_anmeldung] |
Anmeldeformular | seminar="ID" für ein festes Seminar, reihe="ID" für eine Sammelanmeldung |
[bi_kachel] |
Marketing-Kachel (Teaser mit Filter-Link) | siehe unten |
[bi_kacheln] |
Optionaler Grid-Container für mehrere Kacheln | spalten (2/3/4, Standard 3) |
[bi_reihen] |
Kachelübersicht aller Ausbildungsreihen | titel, overline, subline, anzahl |
[bi_seminarsuche] – Such- und Filterleiste
Zeigt die Filterleiste (Volltextsuche, Seminarform, Programm, Bildungszentrum,
Themenfeld, Zielgruppe, Freistellung, Zeitraum) mit der Ergebnisliste. Gefiltert
wird über GET-Parameter (?thema=…&ort=…, Mehrfachwerte pipe-getrennt) –
Filterseiten sind damit verlinkbar und bookmarkfähig. Angezeigt werden nur
kommende, sichtbare Seminare, sortiert nach Startdatum.
Wie viele Seminare auf eine Seite kommen (seit 1.124.0)
Zwischen der Filterleiste und der Trefferliste steht rechtsbündig die Wahl „Seminare je Seite" (10 · 20 · 50 · 100). Die Redaktion kann das nicht für beide Seiten zugleich richtig entscheiden: Wer sucht, will eine kurze Liste; wer stöbert, will scrollen statt klicken. Also entscheidet es, wer davorsitzt.
Sie steht über der Liste, weil sie zu dem gehört, was gleich kommt – unter der Liste hätte man erst zwanzig Treffer durchgescrollt, um zu erfahren, dass es auch fünfzig auf einmal gegeben hätte. Rechtsbündig, weil dort schon die Trefferzahl der Filterleiste steht; links bleibt der Rand für die roten Balken der Trefferzeilen frei. Das Blättern bleibt unverändert mittig unter der Liste.
[bi_seminarsuche] Vorgabe 20, Stufen 10|20|50|100
[bi_seminarsuche per_page="50"] Seite startet mit 50 – 50 steht mit zur Wahl
[bi_seminarsuche pro_seite="10|25|50"] eigene Stufen
[bi_seminarsuche pro_seite="nein"] keine Wahl anbieten, per_page gilt fest
Drei Entscheidungen stecken darin:
- Links, kein Auswahlfeld mit JavaScript. Jede Stufe ist eine eigene
Adresse (
?bi_pro_seite=50) – teilbar, als Lesezeichen brauchbar, und sie funktioniert auch dort, wo das Skript der Filterleiste nicht ankommt (Page-Builder, eingebetteter Rahmen). Die Vorgabe der Seite kommt ohne Parameter aus, damit die Adresse beim Zurückstellen wieder sauber ist. - Nur die angebotenen Stufen gelten. Der Wunsch steht in der Adresse und
ist damit öffentlich;
?bi_pro_seite=5000wäre eine Einladung, den Server rechnen zu lassen, und jede beliebige Zahl wäre zusätzlich ein eigener Eintrag im Seiten-Cache. Die Vorgabe ausper_pagereiht sich immer mit ein, sonst ließe sich der Ausgangszustand nicht wiederherstellen. - Die Wahl verschwindet, wo sie folgenlos wäre – bei
pro_seite="nein", wenn nur eine Stufe übrig bleibt, und wenn ohnehin alle Treffer auf die kleinste Stufe passen. Ein Bedienelement, das nichts ändert, ist keine Freundlichkeit.
Die gewählte Länge hängt an der Adresse und bleibt deshalb beim Blättern und beim Filtern erhalten. Auch „Alle zurücksetzen" in der Filterleiste lässt sie stehen: Das ist eine Aussage über die Ansicht, nicht darüber, welche Seminare gesucht werden. Ein Wechsel der Länge beginnt wieder auf Seite eins – Seite 7 von 40 hat bei 100 Treffern je Seite keine Entsprechung.
Im Einbettungsmodus (?bi_embed=1) bleibt es zusätzlich bei der alten
Freiheit: Dort nennt die Adresse weiterhin jede Zahl zwischen 3 und 50, weil
das fremde Redaktionssystem oft nur ein Adressfeld anbietet und bestehende
Rahmen nicht umspringen sollen.
Geprüft wird das in tests/test-pro-seite.php (ohne WordPress lauffähig).