Im privaten Umfeld ist es nicht selten, dass man Fotos, Videos und Texte nicht mit jedem teilen möchte.
Aber mit Freunden und Familie möchte man schon Inhalte teilen können, und einfach soll es auch sein (außerdem sollen sie auch keine Berechtigungen bekommen, die Homepage zu verändern)... Viele greifen daher bevorzugt auf Facebook, weil Sie meinen, die Inhalte seien dort privat - nun ja, lassen wir Kommentare hierzu beiseite...
Widmen wir uns einer anderen Option: wir erstellen eine WordPress Homepage, zu der nur registrierte User Zugriff haben. Damit aber nicht jeder Login und Passwort sich merken muss, bieten wir zusätzlich zur Standard-Anmeldung, die Möglichkeit, sich via Facebook Login anzumelden.
Vorgehensweise
Wie erreichen wir unser Ziel?
- Zugriff einschränken
- Members Plugin einrichten, um die Rollendefinition von WordPress anzupassen und den Zugang zur Homepage über die Anmeldeseite umzuleiten
- User Role Editor Plugin installieren, um eine individuelle Capability (Berechtigung) zu erstellen
- functions.php Datei des Themes anpassen, um die Inhalte der Homepage für Abonnenten zu verbergen
- Erstellen einer Seite mit Informationen für angemeldete Nutzer, die aber nicht die geeigneten Berechtigungen besitzen
- Facebook Plugin installieren/konfigurieren, um Facebook-Usern die Möglichkeit zu geben, sich ohne Login/Passwort anzumelden
- Facebook-App erstellen
- WordPress Social Plugin einrichten
Zugriff auf Homepage einschränken
Members Plugin einrichten
Das Members Plugin hat für unseren Use-Case 2 Funktionen:
- Allgemeinen Zugriff auf die Inhalte unterbinden: Besucher muss angemeldet sein
- Neue Rolle "Family & Friends" erstellen: als Admin können wir manuell Abonnenten (die keine Berechtigungen haben) in die neue Rolle umziehen
Wir installieren das Plugin Members und kümmern uns um die Einstellungen davon:
- Enable Private Site: anhaken - wir möchten, dass nur angemeldete Nutzer die Inhalte sehen können, daher sollen unangemeldete Nutzer auf die Anmelde-Seite umgeleitet werden, egal welche Seite sie ansteuern
- Disable Feed: anhaken - andere Personen oder Dienste sollen keine Informationen über die Inhalte erhalten
Die anderen voreingestellten Parameter können so bleiben.
Individuelle Capability erstellen
Das Plugin User Role Editor ist ein populäres und kostenfreies Plugin zum Bearbeiten der Nutzer und der Nutzerrollen von WordPress. Für unser Vorhaben erstellen wir eine neue Capability und werden anhand dieser prüfen, ob der Besucher diese Berechtigung hat oder nicht. Die Abfrage ob er berechtigt ist oder nicht folgt im nächsten Absatz zu der functions.php.
Wir erstellen also eine Capability namens oooooxooooo und weisen sie der Rolle "Family & Friends" zu, bzw. auch der Admin-Rolle. Sollten auf der WordPress-Installation auch andere Rollen besetzt sein (Redakteur, ..), dann können Sie die Capability auch diesen Rollen zuweisen. Jedenfalls NICHT der Rolle "Subscriber" (Abonnent) vergeben!
Zusatzeinstellung in der functions.php
Das Members-Plugin ist leider nicht ausreichend für unser Vorhaben bzw. etwas umständlich. Mit dem Members-Plugin wird nämlich nur erzwungen, dass Besucher sich anmelden müssen. Standardmäßig hat aber ein eingeloggter User Zugriff auf alle Inhalte (Seiten / Artikel). Aber selbst wenn man bei allen Seiten und Artikeln, die User-Berechtigungen setzt, bekommt der nicht-autorisierte Besucher z. B. die Artikel-Titel angezeigt, lediglich der Inhalt wird gesperrt.
Das ist nicht was wir haben möchten; wir möchten den Zugriff komplett unterbinden.
Damit nicht-berechtigte Besucher auf eine Seite weitergeleitet werden, auf der z. B. Infos stehen, weshalb der Zugriff verboten ist, fügen wir der functions.php des Themes zusätzlichen Code. Kurze Erklärungen:
- Jedes Theme hat eine
functions.php
. Diese zentrale Datei steuert das Verhalten eines Themes und verbindet verschiedene Dateien zusammen - Der zusätzliche Code prüft 3 Dinge:
- ob der Besucher angemeldet ist,
- ob der Besucher die Capability "oooooxooooo" hat
- und ob der User bereits auf der Seite "Stop" ist
Wenn alle drei Bedingungen zutreffen, wird der Besucher auf die Seite "Stop" weitergeleitet, ansonsten kann der Besucher sich die Seiten/Artikel anschauen. Die dritte Bedingung ist deshalb wichtig: wenn man die Seite "Stop" aufruft, darf keine weitere Weiterleitung stattfinden, sonst wandelt sich die Anfrage in eine unendliche Loop.
Code für functions.php
function my_page_template_redirect(){
if( is_user_logged_in() && ! current_user_can( 'oooooxooooo' ) && ! is_page( 'stop' ) ){
wp_redirect( home_url( '/stop/' ) );
exit();
}
}
add_action( 'template_redirect', 'my_page_template_redirect' );
Code für functions.php bei Multisite
function my_page_template_redirect(){
global $blog_id;
if( is_user_logged_in() && ! current_user_can_for_blog( $blog_id, 'oooooxooooo') && ! is_page( 'stop' ) ){
wp_redirect( home_url( '/stop/' ) );
exit();
}
}
add_action( 'template_redirect', 'my_page_template_redirect' );
Seite mit Infos für abgewiesene Nutzer
Besucher, die sich anmelden aber nicht die erforderlichen Berechtigungen haben, sollten nicht einfach eine weiße Seite zu sehen bekommen oder irgendeine Fehlermeldung. Es ist viel besser, diesen Personen eine Seite anzuzeigen, auf der wir angeben, dass Sie keine Berechtigung haben und sich ggf. an den Homepage-Betreiber wenden sollen. Ein zusätzlicher Hinweis für Facebook-User, die das Facebook-Login zum ersten Mal nutzen und deshalb keine Berechtigung haben ist auch sinnvoll.
Facebook Login
Damit man als Homepage-Betreiber nicht all seine Bekannte erstmal anlegen muss - diese würden sich mit Sicherheit schwer tun, die Anmeldedaten zu behalten - installieren wir eine Facebook-Login Funktion. Wie Sie es wahrscheinlich schon mal gesehen haben, gibt es auf der Anmelde-Seite der Homepage neben der Eingabefelder für Benutzername und Passwort, ein Button "Connect with Facebook" oder mit ähnlicher Beschriftung.
Egal welches Facebook Login Plugin verwendet wird, wir benötigen eine Facebook-App, zu der das Plugin eine Verbindung aufnehmen kann, wenn ein Facebook-Nutzer sich anmelden möchte.
Facebook App erstellen
Um eine Facebook-App zu erstellen, meldet man sich hier an: https://developers.facebook.com. Natürlich muss man Facebook-Zugangsdaten haben, sonst muss man sich registrieren.
- Eine neue App erstellen
- Anzeigename + kontakt email -> App-ID erstellen
- Sicherheitskontrolle (Captcha)
- Einstellungen: Kategorie auswählen, Plattform hinzufügen -> Website -> URL eingeben (ohne slash am Ende) (speichern)
- App Review öffentlich machen und bestätigen
- Codes kopieren und in WP einfügen
WordPress Social Login einrichten
Wir verwenden nun als Plugin WordPress Social Login: das Plugin ist kostenfrei und kann sogar mehr als nur Facebook zu verbinden, es kann auch Google, Twitter und viele andere Netzwerk-Zugänge verbinden.
Damit das Plugin tut was wir wollen, müssen wir folgendes einstellen:
- Daten aus der Facebook App kopieren und in das Plugin eintragen
- Registrierungen und Anmeldungen sollen erlaubt sein
- Die sich über Netzwerke verbindenden User erhalten zunächst die Role "Abonnent" (Subscriber) - das ist zwar die Standardgruppe, aber wir legen es zusätzlich fest: sicher ist sicher!
Wenn ein neuer Facebook-User sich registriert, möchten wir auch informiert werden, um die Berechtigungen, zu ändern (oder nicht, wenn es sich nicht um erwünschte Personen handelt). Dazu diese Einstellung vornehmen: Einstellungen > WP Social Login > Widget > Advanced Settings > Notification > "Notify only the blog admin of a new user".
Optional: Admin-Bar entfernen
Wenn man möchte, dass Benutzer aus der Gruppe "Family & Friends" bzw. solche die keine Admins sind (oder Admin-Berechtigungen haben), die Admin-Bar nicht sehen sollen, dann kann man diese entsprechend ausblenden. Dazu wird erneut in der functions.php
Code hinzugefügt:
function remove_admin_bar() {
if( ! current_user_can('administrator') && ! is_admin() ){
show_admin_bar(false);
}
}
add_action('after_setup_theme', 'remove_admin_bar');
Achtung: das bedeutet natürlich, dass diese Benutzer nicht ohne Weiteres in ihr Profil gelangen können und entsprechend ihre eigenen Daten nicht bearbeiten können. Dafür können wir aber in einem passenden Menü einen Eintrag hinzufügen z. B. "Profil bearbeiten" der https://meine-website.tld/wp-admin/profile.php verlinkt.
Zusammenfassung
Wir haben eine bestehende Homepage verändert, sodass Inhalte erst nach Anmeldung gesehen werden können - wenn die Berechtigung stimmt.
Die Anmeldung alleine reicht nicht aus, der Besucher darf nicht der Gruppe (Rolle) Abonnent gehören (das ist übrigens die Standard-Rolle, wenn Nutzer angelegt werden) und muss eine Zusatz-Berechtigung oooooxooooo besitzen. Nicht erlaubte Besucher werden auf die Seite "Stop" weitergeleitet.
Zu alledem haben wir einen "Facebook-Connector" eingerichtet: Facebook-User können sich anmelden ohne Login und Passwort einzugeben. Neu angemeldete Facebook-User gehören automatisch der Gruppe Abonnent und dürfen vorerst nichts sehen. Achtung: wenn der Besucher einen Adblocker benutzt, kann es sein, dass die Facebook-Anmeldung fehlschlägt.
Als Administrator werde ich automatisch über Neuregistrierungen informiert: wenn ich den Facebook-User kenne, dann weise ich ihm die Rolle "Family & Friends" zu.