Benutzerverwaltung
Die Benutzerverwaltung ist ein Core-Modul des Weinhold Frameworks und das zentrale Authentifizierungssystem – Registrierung, Login, Profilbearbeitung, Passwort-Reset und Rollenzuweisung laufen netzwerkweit über eigene Shortcode-Seiten statt über die WordPress-Standardseiten.
Allgemein
Eigene Login-Seiten statt wp-login.php
Login, Registrierung, Profil und Passwort-vergessen laufen über eigene, per Shortcode gebaute Seiten (meist auf der Hauptsite, netzwerkweit gültig). Aufrufe von wp-login.php werden automatisch auf die passende eigene Seite umgeleitet – nur der eigentliche Formular-POST für den Login selbst sowie technische Flows (Logout, Postpass, Bestätigungslinks) bleiben unangetastet.
In der Praxis – weinify.de
Auf weinify.de und allen Subsites läuft das komplette Login- und Registrierungssystem über dieses Modul. Der weinhold_auth_nav-Shortcode ist im Custom Header eingebunden und sorgt für die siteübergreifende Navigation zwischen Login, Profil und weiteren Seiten.
Rollen & Berechtigungen
Administratoren weisen Rollen und Modulberechtigungen zentral im Dashboard unter Weinhold → Nutzerverwaltung → Modulberechtigungen zu. So kann pro Modul konfiguriert werden, welche Rollen Lese- oder Schreibzugriff haben. Die Rolle eines Nutzers wird dabei immer pro Site einzeln ermittelt (Multisite-Capabilities), nicht netzwerkweit einheitlich.
Profilbild (Avatar)
Nutzer können über das Profil ein eigenes Profilbild hochladen, das Gravatar/Identicon ersetzt – wahlweise netzwerkweit gültig (global) oder nur für die aktuelle Site (lokal, überschreibt global). Fallback-Reihenfolge: Site-spezifisch → Global → WordPress-Standard.
Shortcodes
Shortcode Beschreibung weinhold_auth_login Login-Formular weinhold_auth_register Registrierungsformular für neue Benutzer weinhold_auth_profile Profilansicht und -bearbeitung für angemeldete Benutzer (Passwort ändern, Avatar hochladen) weinhold_auth_lostpassword Formular zum Zurücksetzen des Passworts weinhold_auth_nav Navigationsleiste mit Links zu Login, Profil und weiteren Bereichen weinhold_show_on_login Umschlossener Inhalt wird nur angemeldeten Besuchern angezeigt weinhold_show_on_logout Umschlossener Inhalt wird nur abgemeldeten Besuchern (Gästen) angezeigt
Dateien
modules/user_management_core.php – einzige Datei des Moduls (Core-Modul, das _core.php-Suffix lädt es immer, mit Abstand die größte Moduldatei des Frameworks): Auth-Seiten-Verwaltung, Shortcode-Formulare, Rollen-/Rechte-Auflösung, Redirect-Schutz, Netzwerk- und Site-Admin-Seiten, Avatar-System.
Für Entwickler
Auth-Seiten (zentral konfiguriert)
Die Ziel-Seiten für Login/Registrierung/Profil/Passwort-vergessen werden als Post-IDs in der Netzwerk-Option weinhold_network_auth_settings gespeichert (auth_blog_id plus je eine Page-ID pro Zweck). weinhold_user_management_get_auth_page_url($key) löst daraus die tatsächliche Permalink-URL auf (wechselt bei Multisite kurz auf den konfigurierten auth_blog_id via switch_to_blog()).
Rollen & Capabilities
Funktion Beschreibung weinhold_user_management_get_roles_for_site($site_id) Editierbare Rollen einer Site (get_editable_roles(), pro Site via switch_to_blog()) weinhold_user_management_get_user_role_for_site($user_id,$site_id) Liest die Rolle eines Nutzers direkt aus dessen Capabilities-Meta der jeweiligen Site weinhold_user_management_get_default_role($roles) Vorbelegte Rolle bei der Registrierung (subscriber, falls vorhanden, sonst die erste verfügbare) weinhold_user_management_sort_roles_for_display($roles) Sortiert Rollen fuer die Anzeige: WordPress-Systemrollen zuerst in fester Reihenfolge, Rest alphabetisch Redirect-Validierung
weinhold_user_management_validate_login_redirect_target($redirect_raw) normalisiert und prüft jedes redirect_to-Ziel gegen Open-Redirect-Angriffe: HTML-Entities und mehrfach URL-kodierte Werte werden dekodiert, schema-lose Domains erkannt, und am Ende nur relative Pfade, per wp_validate_redirect() erlaubte Hosts oder (bei Multisite) Domains anderer Netzwerk-Sites akzeptiert – sonst greift ein Fallback auf die Startseite.
Profilbild-Auflösung
Eingehängt über den WordPress-Filter pre_get_avatar_data, wirkt dadurch automatisch überall wo get_avatar_url()/get_avatar() aufgerufen wird. Zwei Speicherebenen: global per update_user_meta($uid,’weinhold_avatar_global‘,$url) (netzwerkweit) und lokal per update_user_option($uid,’weinhold_avatar_local‘,$url,false) (nur aktuelle Site, hat Vorrang). weinhold_um_get_avatar_url($user_id) liefert die aufgelöste URL oder einen leeren String, wenn kein eigenes Bild hinterlegt ist. Upload-Verzeichnis: uploads/weinhold-avatars/ (bei Multisite-Subsites entsprechend unter uploads/sites/{id}/).
Fehlgeschlagene Logins über wp-login.php werden ebenfalls abgefangen (wp_login_failed-Hook), damit Fehlermeldungen auf der eigenen Login-Seite statt auf der WordPress-Standardseite erscheinen. Angemeldete Nutzer, die eine Auth-Seite (Login/Registrierung) direkt aufrufen, werden per template_redirect automatisch weggeleitet (z. B. zum Profil) – verhindert ein erneutes Login-Formular für bereits eingeloggte Besucher. Admin-Bar im Frontend ist standardmäßig ausgeblendet (auch für Administratoren, konfigurierbar unter Weinhold → Nutzerverwaltung → UI-Einstellungen) – Ausnahme lässt sich pro Einstellung gezielt wieder aktivieren. allowed_redirect_hosts wird um alle Domains des Multisite-Netzwerks erweitert, damit wp_safe_redirect() auch netzwerkinterne Ziel-Sites als sicher akzeptiert.Besonderheiten
wp-login.php bleibt technisch erreichbar (WordPress braucht es intern), wird aber bei GET-Aufrufen automatisch auf die konfigurierte eigene Seite umgeleitet – der Login-POST selbst läuft weiterhin über wp-login.php, damit WordPress-Auth-Cookies korrekt gesetzt werden.
Versionshistorie
Version Datum Änderung 1.0.0 22.09.2026 Einführung der Versionierung.