WordPress - Ledenomgeving

Ledenomgeving Prive Redirect

WordPress leent zich ook prima om een ledenomgeving te creëren, waarbij leden toegang krijgen tot pagina’s of berichten die niet voor reguliere bezoekers toegankelijk zijn. Die pagina’s en/of berichten kunnen we dan simpelweg de status “Privé” geven of de status afgeschermd met een “wachtwoord”. Beide opties vinden we bij de editor rechts in het “Publiceren” -blok onder zichtbaarheid.

Geven we de status “wachtwoord” dan is de pagina zichtbaar voor iedere bezoeker (maar niet de content) en dient de bezoeker een wachtwoord op te geven om de content te zien. Bij de status privé is de pagina niet bereikbaar voor niet-ingelogde bezoekers en komt die bezoeker uit op de 404-pagina van de website.

We willen de pagina in zijn geheel niet zichtbaar hebben en dienen dus voor de “privé” status te kiezen. Alleen zou het dan beter zijn als de niet-ingelogde bezoeker op een informatieve pagina terecht komt of omgeleid wordt naar de home-pagina.

Dit kunnen we bewerkstelligen met een redirect-code-snippet:

/* redirect all non logged in users when trying to see private posts */

add_action('template_redirect', 'qwain_private_content_redirect', 9);
function qwain_private_content_redirect() {
  global $wp_query,$wpdb;
  if (is_404()) {
    $private = $wpdb->get_row($wp_query->request);
    $redirect_page = home_url();  
    if( 'private' == $private->post_status  ) {
      wp_safe_redirect($redirect_page);
      exit;
    }
  }
}

Door deze code toe te voegen aan het functions.php bestand zullen alle niet ingelogde bezoekers die een bericht of pagina met de status “privé” proberen te bekijken uitkomen op de home-pagina.

Willen we de niet ingelogde bezoeker naar een andere pagina verwijzen (bijvoorbeeld een pagina waar we uitleggen dat om de gewenste pagina of bericht te bekijken een lidmaatschap nodig is), dan vervangen we de regel “$redirect_page = home_url()” door “$redirect_page_id = xx”; waarbij xx dan het pagina-id is van de pagina waar we de bezoeker naar toe willen verwijzen.

De regel met de functie wp_safe_redirect dienen we dan ook nog aan te passen. De volledige snippet wordt dan:

/* redirect all non logged in users to page with id, when trying to see private posts */
add_action('template_redirect', 'qwain_private_content_redirect', 9);
function qwain_private_content_redirect() {
  global $wp_query,$wpdb;
  if (is_404()) {
    $private = $wpdb->get_row($wp_query->request);
    $redirect_page_id = xx;  /// vervang xx door de pagina-id
    if( 'private' == $private->post_status  ) {
      wp_safe_redirect( get_permalink( $redirect_page_id ), 301);
      exit;
    }
  }
}

Let wel dat je alleen één van de voorgaande functies gebruikt; dus of de redirect naar de home-pagina of de redirect naar een specifieke pagina.

Om te achterhalen wat het ID is van de pagina die je wilt gaan gebruiken zie dit artikel: WordPress ID nummers.

Categorie Redirect

Met voorgaande snippets kunnen we een redirect instellen voor privé pagina’s of berichten. Archiefpagina’s kunnen we echter niet op privé zetten en die zijn dus gewoon te bereiken (bekijken) door alle bezoekers. Hebben we dus berichten die we aan een bepaalde categorie hebben toegevoegd, dan maakt WP ook een archiefpagina aan van die categorie.

In een leden-omgeving is dat natuurlijk ook niet wenselijk. Die categorie zou dan ook alleen zichtbaar moeten zijn voor ingelogde bezoekers (leden).

Om één of meerdere categorieën niet bereikbaar te maken voor niet leden, kunnen we de volgende snippet inzetten:

/* redirect all non logged in users when trying to see a archive (category) */
add_action( 'template_redirect', 'qwain_redirect_cat_to_page' );
function qwain_redirect_cat_to_page() {
    // Nothing happens if the user is logged in.
    if ( is_user_logged_in() ) {
        return;
    }

    // Redirect to a special page if the user is trying to access
    // a category.
    if ( is_category() {

        // Set the ID of the page to redirect to.
        // Change the ID to the desired page to redirect to.
        $redirect_to_page_id = XX; // vervang XX door de pagina-ID waarnaar toe de redirect moet

        wp_safe_redirect( get_permalink( $redirect_to_page_id ), 301 );
        exit;
    }
}

 

Op regel 11 hebben we via “is_category()” nu ALLE categorieën uitgeschakeld voor niet ingelogde bezoekers. Vervang XX door de pagina-ID waar dan naar toe omgeleid dient te worden.

Willen we slechts één categorie niet zichtbaar hebben dan kunnen we op regel 11 de functie “is_category()” aanpassen door daar de categorie naam, slug of ID op te geven. Het is ook mogelijk om meerdere categorieën op te geven.

Wijzig dan regel 11 in:

FunctieOmschrijving
is_category();alle categorieën
is_category( '10' );alleen categorie met ID = 10
is_category( 'Groenten' );alleen categorie met de Naam 'Groenten'
is_category( 'zomer-planten' );alleen de categorie met de Slug 'zomer-planten'
is_category( array( 9, 'zomer-planten', 'Groeten') );alleen de categorieën met de ID 10, of de categorie met de Slug 'zomer-planten' of de categorie met de naam 'Groenten' (dus 3 categorieën).

Ledenomgeving

Met deze eenvoudige snippets hebben we een eerste stap gemaakt naar een eigen ledenomgeving. Gedurende een volgend artikel uit deze serie zullen we beschrijven hoe we de WP-Admin kunnen afschermen voor de leden, een bijbehorend inlogscherm maken met de bijpassende redirects.

Vragen & Info

Heb je vragen naar aanleiding van dit artikel, stuur ons dan een mail op: info@qwain.nl of geef een reactie via onderstaand reactie-formulier.

Op de hoogte blijven van alle WordPress Nieuwtjes, Tips & Tricks… volg ons dan op Facebook .

 

Overige Artikelen


Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *