SWPM Inhaltsschutz
siehe auch diesen Thread
SWPM
(Simple WordPress Membership
) bietet die Möglichkeit, Inhalte auf der Basis der Mitgliedsstufe zu schützen, d.h. dass diese erst nach einer Anmeldung angezeigt werden.
Schritt 1
Um das Verhalten und mögliche Probleme im Zusammenspiel mit anderen Plugins zu untersuchen, wurde eine neue WP-Instanz auf meinem Entwicklungssystem eingerichtet, die zunächst nur zwei Plugins enthält:
User Role Editor
Simple WordPress Memebership
.
Schritt 2
- anlegen einer Kategorie namens
Privat
- anlegen einer Benutzerrolle mit dem Namen
Privat
(basierend aufAbonnent
) und einer Mitgliedschaftsstufe, die dieser entspricht - anlegen eines Benutzers mit dieser Mitgliedschaftsstufe
Kategorie bearbeiten
-Diaöog prüfen ⇒ es werden keine Einstellungen für die Zugriffskontrolle (anders als vonSWPM
angegeben) angezeigtContent Access Control
für Kategorien unterSWPM
konfigurieren:- allgemeinen Schutz für die Kategorie
Privat
aktivieren (sollte Zugriff für nicht eingeloggte Benutzer verhindern) - speziellen Schutz für die Rolle
Privat
und die KategoriePrivat
aktivieren (soll eingeloggten Benutzern, die der MitgliedschaftsstufePrivat
zugeordnet sind, den Zugriff ermöglichen)
- einen Beitrag erstellen, der der Kategorie
Privat
zugeordnet ist - Zugriff testen:
- nicht eingeloggt: für den privaten Beitrag wird nur die Überschrift und ein Hinweis zum Einloggen angezeigt (O.K.)
- aber: kein Link zum Login (?) ⇒ Link wird nur in der Beitragsansicht angezeigt (Feature, Bug?), nehmen wir es mal als Feature…
- eingeloggt: der ganze Text wird angezeigt (O.K.)
Schritt 3
Publish Press Permissions
installieren- Zugriffskontrolle für Kategorie
Privat
setzenPrivat
aktiviertAbonnent
deaktiviert{Alle}
deaktiviert{Anonymus}
deaktiviert{Authenticated}
disabled
- Testzugang:
- nicht eingeloggt: privater Beitrag ist nicht gelistet, daher kein Hinweis auf Einloggen (~ O.K.)
- eingeloggt: privater Inhalt wird angezeigt (O.K.)
Schritt 4
Publish Press Permissions
deaktiviert- Testzugang:
- nicht eingeloggt: es wird nur die Überschrift und ein Hinweis zum Einloggen für den privaten Beitrag angezeigt (O.K.)
- eingeloggt: der gesamte Text wird angezeigt (O.K.)
- ⇒ wie erwartet!
Schritt 5
Publish Press Permissions
gelöscht- Testzugang:
- nicht eingeloggt: es wird nur die Überschrift und ein Hinweis zum Einloggen für den privaten Beitrag angezeigt (O.K.)
- eingeloggt: der gesamte Text wird angezeigt (O.K.)
- ⇒ wie erwartet!
Behebung des Anzeigefehlers (Exzerpt)
WordPress entfernt alle HTML-Tags (also auch Links) bei Anzeige des Exzerpts eines Beitrags, einer Seite usw. (siehe WordPress-Funktion wp_trim_words
). Damit verschwinden die Links zur Login- und zur Registrierungs-Seite, sofern SWPM
wegen des Zugriffsschutzes den Inhalt nicht anzeigt.
Abhilfe bringt ein Filter (z.B. in der functions.php
des Themes), der die Links wieder einbaut:
function swpm_trim_words( $text, $num_words, $more, $original_text ) { $original_text = $text; // check presence of text regarding to 'login' and 'join us' // see /plugins/simple-membership/classes/class.swpm-utils-misc.php $chkMsg = SwpmUtils::_( 'Please' ).' '.SwpmUtils::_( 'Login' ).'. '; $chkMsg .= SwpmUtils::_( 'Not a Member?' ).' '.SwpmUtils::_( 'Join Us' ); $text = str_replace($chkMsg, SwpmMiscUtils::get_login_link(), $text); return $text; }; // add the filter add_filter('wp_trim_words', 'swpm_trim_words', 10, 4);
Der Text, der normalerweise die Links enthält, wird hier wieder durch die variante mit Links ersetzt.
Andere entfernte HTML-Tags bleiben somit unberührt, die generelle Funktion der Auszug-Anzeige, wie sie durch WordPress vorgesehen ist, bleibt erhalten.