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

wordpress:wordpress_1.jpg

  • anlegen einer Kategorie namens Privat
  • anlegen einer Benutzerrolle mit dem Namen Privat (basierend auf Abonnent) 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 von SWPM angegeben) angezeigt
  • Content Access Control für Kategorien unter SWPM 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 Kategorie Privat aktivieren (soll eingeloggten Benutzern, die der Mitgliedschaftsstufe Privat 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

wordpress:wordpress_2.jpg

  • Publish Press Permissions installieren
  • Zugriffskontrolle für Kategorie Privat setzen
    • Privat aktiviert
    • Abonnent 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.