BuddyPress inloggen verplicht maken voor pagina’s

22 juli 2016 om 08:00

BuddyPress logo.Afgelopen week was ik bezig om een nieuwe website voor een personeelsverenigimg in WordPress te maken.

De website moest het mogelijk maken om in te kunnen loggen zodat mensen hun persoonlijke gegevens kunnen beheren, zich aan kunnen melden voor uitjes, foto’s van uitjes kunnen bekijken en om interne nieuwsberichten te lezen. Hiervoor heb ik gebruik temaakt van de gratis BuddyPress plug-in.

De website is voorzien van een aantal openbare pagina’s en pagina’s die alleen bekeken mogen worden als een gebruiker is ingelogd. Te denken valt aan een overzicht van gebruikers, agenda, fotoalbum en interne nieuwsberichten.

BuddyPress bied standaard geen functionaliteit om aan te geven voor welke pagina’s inloggen verplicht is. Aangezien de website al genoeg plug-ins had wilde ik er niet nog een installeren om dit wel mogelijk te maken.

Na wat zoeken op internet vond ik een functie in PHP geschreven die dit mogelijk maakt. De functie moet je toevoegen aan de functions.php bestand van je thema en ziet er uit zoals hieronder afgebeeld.

Heb je een thema gedownload of gekocht dan plaats je deze functie natuurlijk in een child theme. Dit maakt bijwerken van het parent thema in de toekomst gemakkelijker.

De array “$exclude_pages” vul je met de pagina’s die wel zichtbaar mogen zijn voor niet ingelogde gebruikers. Standaard in het voorbeeld is dat dus de registratie en activatie pagina van BuddyPress. De functie kan je ook gebruiken voor een normale WordPress website.

/**
 * Make a site Private, works with/Without BuddyPress
 * 
 * @author sbrajesh
 * @global string $pagenow
 * 
 */
function buddydev_private_site() {
    
    //first exclude the wp-login.php
    //register
    //activate
    global $pagenow;
    
    //do not restrict logged in users
    if( is_user_logged_in() ) {
        return ;
    }
    //if we are here, the user is not logged in, so let us check for exclusion
    //we selectively exclude pages from the list
    
    //are we on login page?
    if( $pagenow == 'wp-login.php' ) {
        return ;
    }
    
    //let us exclude the home page
    if( is_front_page() ) {
        return ;
    }
    
    $exclude_pages = array( 'register', 'activate' );//add the slugs here
    
    //is it one of the excluded pages, if yes, we just return and don't care
    if( is_page( $exclude_pages ) ) {
        return ;
    }
    
    $redirect_url = wp_login_url( site_url('/') );//get login url,
    
    wp_safe_redirect( $redirect_url );
    exit( 0 );
}
add_action( 'template_redirect', 'buddydev_private_site', 0 );

Bron: Buddydev.com – Making a WordPress & BuddyPress Site Private, the Right Way

Tweet about this on TwitterGoogle+Share on FacebookPrint this page