Skip to main content
Geschätzte Lesedauer: 3 Minuten

MemberPress ist ein umfangreiches Mitgliedschaften-Plugin für WordPress mit einer Vielzahl an Funktionen. Durch viele Shortcodes ist die Integration in eine WordPress-Webseite gut umsetzbar und die Shortcodes sind gut dokumentiert im eigenen Help Center von MemberPress. Es gibt jedoch wenige Codebeispiele und ein guter Blick hinter die Kulissen der Funktionsweise ist oft schwierig.

An dieser Stelle wollen wir uns die Regeln von MemberPress genauer anschauen.

Was sind Regeln bei MemberPress?

Regeln werden genutzt, um bestimmte Inhalte der Seite zu schützen und nur bestimmten Mitgliedschaften Zugriff auf diese Inhalte zu gewähren. Eine Regel definiert dabei immer:

  1. den Inhalt: Dies können einzelne oder mehrere Beiträge und Seiten sein oder auch Kategorien, Kurse und dergleichen.
  2. eine Mitgliedschaft, die z.B. kostenpflichtig sein kann oder bei der Eintragung in einen Newsletter vergeben wird.
memberpress - Backend-Ansicht zu Regeln

MemberPress – Backend-Ansicht zu Regeln

Aus dieser Kombination kann dann mit MemberPress der Seiteninhalt entsprechend für berechtigte Nutzer und nicht-berechtigte Nutzer unterschiedlich ausgegeben bzw. ganz geblockt werden.

Eine genauere Erläuterung der Regeln finden Sie in der Dokumentation von MemberPress.

Welche Regeln gelten für einen bestimmten Nutzer?

Diese Frage erscheint im ersten Moment recht offensichtlich, ist jedoch in der praktischen Umsetzung nicht ganz so einfach wie erwartet. Im Backend von WordPress im Bereich von MemberPress werden für jeden Nutzer die bestehenden Mitgliedschaften aufgelistet, nicht jedoch welche geschützten Inhalte ein Nutzer damit einsehen darf.

Die Regeln, die eine Mitgliedschaft gewährt, greifen erst beim Aufruf der Inhalte durch einen Nutzer und sind als Abfragemöglichkeit als php-Funktion so erst einmal nicht möglich. Dazu müssen wir uns die Regel genauer anschauen.

MemberPress Regeln – ein CPT mit Metadaten

Alle Regeln in MemberPress entsprechen einem Custom Post Type (CPT) mit dem Namen ‚memberpressrule‘. Dadurch bekommen wir auch eine Einsicht zu den Metadaten der Regeln, z.B. mit get_post_meta();. In einer WordPress-Query Abfrage können wir ‚post_type‘ => ‚memberpressrule‘ nutzen, um alle Regeln abzufragen.

Im Hinblick auf die Metadaten der Regel sind für uns 2 Einträge interessant:

_mepr_rules_content als ID array aller geschützten Inhalte der Regel
_mepr_rules_type als string array mit dem bzw. den Inhaltstypen, die geschützt werden

Um sich alle Einträge der Metadaten ausgeben zu lassen, kann folgender Code genutzt werden:


    /// Wir nutzen WP_Query um ein array zu erzeugen, das alle 
    /// veröffentlichen MemberPress-Regeln beinhaltet
    $all_rules = new WP_Query(array(
      'post_type' => 'memberpressrule',
      'post_status' => 'publish'
    ));
  
    /// Jetzt gehen wir durch die einzelnen Regeln,...
    while ( $all_rules->have_posts() ) : $all_rules->the_post();

        $post_ID = get_the_ID();

        ///... holen uns die Metadaten...
        $rule_meta = get_post_meta($post_ID);

        //... und geben sie nacheinander aus.
        foreach($rule_meta as $key=>$val)
        {
          echo $key . ' : ' . $val[0] . '
'; } endwhile; wp_reset_query();

Und bekommen damit eine Übersicht der Metadaten.

Auflistung der MemberPress Regel-Metadaten

Metadaten einer MemberPress Regel

Welche geschützten Inhalte kann ein Nutzer einsehen?

Um nun alle geschützten Inhalte eines Nutzers anzuzeigen bzw. aufzulisten, verbinden wir den Zugriff auf die Metadaten der Regel mit den Mitgliedschaften des Nutzers.

In unserem Beispiel wollen wir den Inhalte für den eingeloggten Nutzer prüfen, um Sie in seinem Account-Bereich aufzulisten. Dabei gehen wie folgt vor:


    /// Wir nutzen WP_Query um ein array zu erzeugen, das alle 
    /// veröffentlichen MemberPress-Regeln beinhaltet
    $all_rules = new WP_Query( array(
      'post_type' => 'memberpressrule',
      'post_status' => 'publish'
    ));

    /// Jetzt gehen wir durch die einzelnen Regeln...
    while ( $all_rules->have_posts() ) : $all_rules->the_post();

        $post_ID = get_the_ID();

        ///... und schauen, ob der aktive Nutzer, Zugriff auf Inhalte hat, die 
        /// mit dieser Regel gechützt sind.
        if( current_user_can('mepr-active','rule:'.$post_ID) ) :

            /// Hier bekommen wir die IDs für alle geschützten Inhalte der Regel...
            $rule_content_IDs = get_post_meta( $post_ID, '_mepr_rules_content' );

            foreach($rule_content_IDs as $ID)
            {
                ///... und geben z.B. den Title nacheinander aus.
                echo get_the_title( $ID );
            }

        endif;

    endwhile;

    wp_reset_query();

current_user_can(‚mepr-active‘,’rule:‘.$post_ID) ist dabei eine Funktion von MemberPress, die abfragt, ob ein Nutzer, in diesem Falle der aktive, eingeloggt Nutzer, Inhalte einsehen darf.

Um eventuell die Auflistung auf gewisse Inhaltstypen zu begrenzen, können wir den Metadaten-Eintrag zu _mepr_rules_type nutzen, um hier Regeln auszusortieren.

So sähe dann der gesamte Code aus,  um einzelne Seite und einzelne Lessons aufzulisten, nicht jedoch Kurse oder Beiträge:


/// Wir nutzen WP_Query um ein array zu erzeugen, das alle 
    /// veröffentlichen MemberPress-Regeln beinhaltet
    $all_rules = new WP_Query( array(
      'post_type' => 'memberpressrule',
      'post_status' => 'publish'
    ));

    /// Jetzt gehen wir durch die einzelnen Regeln...
    while ( $all_rules->have_posts() ) : $all_rules->the_post();

        $post_ID = get_the_ID();

        ///... und schauen, ob der aktive Nutzer, Zugriff auf Inhalte hat, die 
        /// mit dieser Regel gechützt sind.
        if( current_user_can('mepr-active','rule:'.$post_ID) ) :

            /// Hier holen wir uns alle Inhaltstypen der Regel...
            $rule_type = get_post_meta( $post_ID, '_mepr_rules_type' );

            foreach($rule_type as $type)
            {
                ///... und können entsprechend die Regeln aussortieren
                if($type == "single_page" || $type == "single_mpcs-lesson") :

                    /// Hier bekommen wir die IDs für alle geschützten Inhalte der Regel...
                    $rule_content_IDs = get_post_meta( $post_ID, '_mepr_rules_content' );

                    foreach($rule_content_IDs as $ID)
                    {
                        ///... und geben z.B. den Title nacheinander aus.
                        echo get_the_title( $ID );
                    }

                endif;
            }

        endif;

    endwhile;

    wp_reset_query();

Wenn Sie Hilfe bei der Einrichtung von MemberPress benötigen oder sonstige Fragen rund um das Thema WordPress haben, kontaktieren Sie uns gerne. Als WordPress Agentur helfen wir Ihnen gerne weiter.