WordPress Inhalte nur für registrierte User sichtbar machen

Es gibt viele Gründe, bestimmte Blog-Inhalte nur für registrierte Nutzer sichtbar zu machen (Premium Content, Anweisungen, interne Links).

Leider gibt es keine Standard-Lösung von WordPress für dieses Vorhaben. Ich zeige dir, wie du dieses Problem elegant lösen kannst (mit wenigen Zeilen Code oder Plugins).

Premium-Inhalte durch Plugins oder Themes

Einige Plugins bietet dir genau die gewünschte Funktionalität. Teilweise ist dieses Feature auch bereits in Themes integriert.

Vielleicht passt eines der nachfolgenden Produkte genau zu deinem Vorhaben?

Digimember (Plugin)

Möchtest du bestimmte Inhalte verkaufen, kannst du direkt ein Memberplugin wie zum Beispiel Digimember* benutzen. Dann hast du im Backend die Möglichkeit, deine Beiträge und Seiten einem „Produkt“ zuzuweisen, welches nur noch Käufern angezeigt wird.

Besucht ein nicht eingeloggter User eine Produktseite, bekommt er eine Login-Maske angezeigt.

Was (mir) in Digimember fehlt, ist eine elegante Möglichkeit, Inhalte für alle registrierte Nutzer anzuzeigen – unabhängig von einem Produktkauf. Daher findest du weiter unten meine Lösung, wie ich diese Funktion in Digimember doch nutzen kann.

GeneratePress (Theme)

Das sehr beliebte WordPress Theme GeneratePress* (welches übrigens wirklich genial ist) bietet in der Premium-Version ebenfalls eine fertige Möglichkeit um Inhalte zu verstecken.

Mit Hilfe der sogenannten „Elements“ lassen sich beliebige Inhalte, an beliebigen Stellen, nach unterschiedlichen Kriterien in deinem Blog anzeigen.

So ist auch eine Konfiguration möglich, bestimmte Inhalte (Blöcke) beispielsweise nur für eingeloggte Leser sichtbar zu machen.

Es gibt natürlich noch eine Vielzahl anderer Plugins, die ähnliche Funktionen bieten. Wenn du einen Favoriten hast, hinterlasse gern einen Kommentar!

Eigener Shortcode mit weiteren Vorteilen

Die Fertiglösungen passten mir (wie immer) nicht. Daher habe ich mir, trotz Einsatz von Digimember, einen kleinen Shortcode geschrieben, der folgendes erlaubt:

  • Inhalte für nicht registrierte Nutzer ausblenden
  • Inhalte für registrierte Nutzer einblenden
  • Inhalte für alle Nutzer anzeigen

Und dies unabhängig voneinander und sogar auf der gleichen Seite.

So lässt sich beispielsweise eine Login-Seite mit einem Dashboard kombinieren – abhängig davon, ob der User eingeloggt ist oder nicht.

Möglich wird dies alles durch die WordPress Funktion is_user_logged_in().

Folgende Funktion brauchst du dazu in deiner functions.php:

//Inhalte für registrierte / nicht registrierte Nutzer ausspielen
function function_os_content($atts, $content = null) {

    //Standard Werte
    $values = shortcode_atts( array(
        'type'      => 'logged_out',
    ), $atts );

    //Nur für ausgeloggte User sichtbar
    if($values['type'] == 'logged_out' && !is_user_logged_in()){
        return do_shortcode($content);
    }

    //Nur für eingeloggte User sichtbar
    if($values['type'] == 'logged_in' && is_user_logged_in()){
        return do_shortcode($content);
    }

}
add_shortcode('os_content', 'function_os_content');

Inhalte, die für ausgeloggte User angezeigt werden sollen, schreibst du zwischen die Shortcodes [os_content type=“logged_out“] und [/os_content].

Nur für ausgeloggte User

Inhalte, die nur für eingeloggte User sichtbar sein sollen, kommen zwischen [os_content type=“logged_in“] und [/os_content].

Nur für eingeloggte User

Du kannst innerhalb der Shortcodes weitere Shortcodes einsetzen.

Sollen Inhalte immer angezeigt werden, dürfen sie von keinem der Shortcodes umschlossen sein.

Mit diesem einfachen Code-Schnipsel kannst du Inhalte jetzt beliebig ein- und ausblenden. Viel Spaß beim Tüfteln!

10 Gedanken zu „WordPress Inhalte nur für registrierte User sichtbar machen“

  1. Sehr schöner Beitrag – als ich das gelesen habe, dachte ich sofort das ist die perfekte Lösung für meinen Blog. Ich will auf meiner Seite im Prinzip nur 2 Textzeilen ausblenden. Eingeloggte Nutzer sollen sehen welche anderen Nutzer sich für eine Veranstaltung (Spieleabend) angemeldet haben. Nicht eingeloggte Nutzer eben nicht.

    Leider funktioniert deine Lösung – so schön sie auch klingt – bei mir nicht. Egal was ich zwischen die Shortcodes eintrage – es ist weder für eingeloggte noch für ausgeloggte User zu sehen. Gilt sowohl für [os_content type=“logged_out“] … [/os_content], als auch für [os_content type=“logged_in“] … [/os_content]. Eine Idee woran das liegen könnte? Brauche ich eine bestimmte WordPress-Version? Vermutlich bin ich einfach zu blöd.

    Antworten
    • Moin, danke! Also ich habe die Shortcodes genau so im Einsatz. In der aktuellen WP Version.
      Schau am besten nochmal, ob du alles korrekt eingebaut hast. 🙂

      Antworten
  2. Dein Code funktioniert bei mir ausgezeichnet. Genau so habe ich mir das vorgstellt und kann nun individuell Content für die verschiedenen Gegebenheiten ein- bzw. ausblenden! Top!! Vielen Dank!

    Antworten
    • Nachtrag: Leider funktioniert es doch nicht. Habe mich eben ausgeloggt und sehe den Inhalt, den eigentlich alle Gäste sehen sollten, nicht. Bei mir läuft auch die neuste Version und Deinen Code habe ich ans Ende der functions.php gesetzt.

      Antworten
      • Ich habe den Code nochmal woanders getestet und einen potentiellen Fehler gefunden. In meinem Snippet waren einfache und doppelte Anführungszeichen gemischt, was scheinbar dazu geführt hat, dass die Anführungszeichen im Shortcode mit übergeben wurden.
        Nachdem ich im Snippet komplett auf einfache Anführungszeichen gewechselt habe, funktionierte es wieder. Komischerweise scheint der Fehler nicht überall aufzutauchen… probiere es jetzt am besten nochmal mit dem neuen Code-Snippet oben.

        Antworten

Schreibe einen Kommentar