Een waarschuwing: In dit artikel laat ik je zien hoe je content in je blog alleen toegankelijk voor leden kan maken. Hier worden een aantal gevorderde technieken in getoond. Door het maken van kleine foutjes kan je jouw website onbeschikbaar maken. Voer dit dus nooit uit op een live website, maar altijd op een kopie. Zorg dat je voor je begint een goede back up hebt. Lees ook mijn artikel over staging.
Content alleen toegankelijk voor leden… een marketing techniek.
Wanneer je een online leeromgeving of op een andere manier een membership site hebt, dan is één goede manier om mensen te motiveren jouw product te kopen een deel van dit product alvast te tonen.
Een mogelijke manier is bijvoorbeeld om in je blog gerelateerd aan je online leeromgeving antwoord te geven op bepaalde vragen door middel van tekst, maar waarbij je slechts een deel van de content beschikbaar stelt. Een tweede deel van de content, met de meest waardevolle informatie wordt alleen beschikbaar gesteld aan mensen met een geldig lidmaatschap, nadat ze zijn ingelogd.
Of misschien wat minder commercieel, je wilt graag de lezers van je informatie kennen en ze kunnen alleen doorlezen, indien ze zich aan hebben gemeld voor een gratis lidmaatschap. Zolang ze een gratis lidmaatschap hebben, hebben ze toegang tot de informatie (en kan je hen bereiken met de nieuwsbrief), maar zodra ze geen prijs meer stellen op de nieuwsbrief, krijgen ze slechts het eerste deel van de informatie te zien.
Wat ook je strategie mocht zijn om content alleen toegankelijk voor leden te maken, in deze blogpost ga ik je vertellen hoe je dit kan doen. En omdat ik eigenlijk een heel aardige vent ben, kost het je geen cent. Je hoeft je niet eens te registreren.
Coderen noodzakelijk
Er zijn plugins die deze mogelijkheid aanbieden, maar eigenlijk is zo’n plugin een enorme overkill. Ik wil je eigenlijk motiveren om dit soort code van enkele regels niet in een aparte plugin onder te brengen, maar om dit gewoon in de functions.php van je thema te zetten.
En om dat op een veilige manier te doen, blijf je met je vingers van de code van het thema wat je hebt geïnstalleerd, maar doe je dit in het Child theme.
Mocht je niet weten wat een Child theme is, en hoe je een child theme kan maken, moet je zeker dit blogartikel over de Child Theme Generator eens lezen.
Ook mijn artikel over ‘WooCommerce voor Waaghalzen‘ geeft belangrijke informatie hoe je veilig code aan je WordPress website kan toevoegen.
Laten we nu beginnen onze content alleen toegankelijk voor leden te maken.
Wat is het algemene idee?
Door de code die we gaan schrijven maken we het mogelijk om bepaalde content, die we tonen tussen de shortcodes [member] en [member] zichtbaar te maken voor uitsluitend degenen die ingelogd zijn op de website.
En in de tussentijd leg ik je ook even iets uit over hoe shortcodes eigenlijk werken.
Laten we beginnen met de eerste ‘versie’, de meest eenvoudige mogelijkheid om content beperkt zichtbaar te maken.
<?php
add_shortcode( 'member', 'member_check_shortcode' );
function member_check_shortcode( $atts, $content = null ) {
if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
return $content;
return '';
}
Hoe werkt de functie?
Wat zeggen we hierboven eigenlijk? Op zich hoef je de code om je content alleen toegankelijk voor leden te maken niet echt te begrijpen, wanneer je het toevoegt aan je functions.php zal het zonder meer werken, maar laten we toch even kijken, wat er hier gebeurt.
We willen dus dat de content alleen toegankelijk is voor leden. En om het allemaal simpel te houden, definieren we ‘lid’ als ‘iemand die mag inloggen op de website’.
Allereerst vertellen we WordPress dat we een shortcode hebben. Zodra iemand de shortcode [member] gebruikt, dan moet WordPress de functie ‘member_check_shortcode’ uitvoeren.
Deze functies krijgt bepaalde specifieke informatie mee, die we ‘parameters’ noemen en tussen haakjes mee worden gegeven. Deze parameters zijn de ‘attributen’ en de ‘content’. Hierover later meer.
Is de persoon ingelogd?
We hadden al gezegd, dat de persoon ingelogd moet zijn, en gelukkig is dit in WordPress heel makkelijk te controleren. Er is een simpele functie met de simpele naam ‘is_user_logged_in()’.
Het is niet strikt noodzakelijk, maar om het allemaal mooi te houden, willen we voorkomen, dat de functie zaken ’terug geeft’, op het moment dat er niets terug te geven valt, dus laten we ook controleren, of er wel content is die er getoond moet worden.
Als ik bijvoorbeeld de shortcode [member] zonder iets extra, of [member][/member] zou gebruiken, zou er niets terug te geven zijn.
Ook controleren we of we wel naar deze content kijken via de webpagina, en niet via een (RSS of andere) feed.
Over de content
In de functie zie je ook een parameter die ‘content’ heet. En in deze parameter vind je alles, wat er tussen [member] en [/member] staat.
Hier kan alleen iets chronisch fout gaan. Want als tussen de begin- en einde shortcode een extra shortcode voorkomt, zal deze als shortcode teruggegeven worden. Dus wanneer je iets hebt als
[member] Dit is mijn [shortcode id=12][/member]
dan had je wellicht verwacht, dat de shortcode [shortcode id=12] ook uitgevoerd zou worden, maar dat is niet het geval. Dit krijg je als gewone tekst terug.
Wil je zeker weten, dat je het resultaat van de ingevoegde shortcode terugkrijgt, dan moet je hier expliciet om vragen middels de functie do_shortcode().
Dus een betere functiecode zou zijn
<?php
add_shortcode( 'member', 'member_check_shortcode' );
function member_check_shortcode( $atts, $content = null ) {
if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
return do_shortcode($content); //deze regel is aangepast
return '';
}
Een verdere verfijning
De [member] shortcode is echter niet erg selectief. Iedereen die in kan loggen, krijgt te zien wat er tussen de [member] en [/member] code staat. Wellicht wil je dit koppelen aan een specifieke gebruikersrol.
Wil je jouw content alleen toegankelijk voor leden maken die een specifieke rol hebben, dan wordt het gelijk een stukje complexer. Want een gebruiker kan meer dan één rol hebben.
Ok, via de gebruikersinterface kan je maar één rol toekennen, maar de WordPress API houdt er rekening mee, dat één gebruiker meerdere rollen kan hebben. En er zijn zelfs plugin die het mogelijk maken.
Wat je dus moet controleren is of de gebruiker in zijn lijst met rollen één specifieke rol heeft.
Dat kan als volgt. Laten we zeggen, dat we willen controleren of de gebruiker een -door een plugin toegevoegde- rol van ‘student’ heeft:
<?php
add_shortcode( 'member', 'member_check_shortcode' );
function member_check_shortcode( $atts, $content = null )
if (empty($atts['role']) {
return 'FOUT: Je moet een rol meegeven, anders valt er niets te controleren';
} else {
$role = ($atts['role']);
}
$user = wp_get_current_user();
if ( in_array( $role, (array) $user->roles ) ) {
$rolematch = true;
} else {
$rolematch = false;
}
if ( is_user_logged_in() && $rolematch && !is_null( $content ) && !is_feed() )
return do_shortcode($content); //deze regel is aangepast
return '';
}
Wil ik bepaalde content alleen laten zien aan ingelogde gebruikers die de rol ‘student’ hebben, dan kan ik dat doen door de shortcode als volgt te gebruiken
[member role="student"]Alleen cursisten mogen dit zien[/member]
Hoe vertel ik iemand, dat hij geen toegang heeft?
Wanneer je content alleen toegankelijk voor leden is, dan wil je waarschijnlijk ook vertellen, wanneer iemand geen toegang heeft. En het liefst wil je natuurlijk helemaal vrij zijn in de content waardoor je het vertelt. Het kan een enkele regel tekst zijn, maar mogelijk ook een compleet opgemaakte boodschap.
Het vertellen dat er geen toegang is, is eigenlijk het omgekeerde van het vertellen dat er wel toegang is. Maar omdat we twee situaties onderkennen, zijn er ook twee oplossingen mogelijk.
Ingelogd vs. niet ingelogd
In de simpelste versie van de code hoef ik alleen te testen of iemand is ingelogd. Is iemand ingelogd, dan heeft hij toegang tot de content alleen toegankelijk voor leden, anders niet.
Laten we aannemen, dat we voor ‘niet ingelogde mensen’, de shortcode ‘visitor’ willen gebruiken. We krijgen dan:
<?php
add_shortcode( 'visitor', 'visitor_check_shortcode' );
function visitor_check_shortcode( $atts, $content = null ) {
if ( !is_user_logged_in() && !is_null( $content ) && !is_feed() )
return do_shortcode($content);
return '';
}
Simpel hè? Je had het zelf kunnen bedenken.
Niet een bepaalde rol hebben
Wanneer we willen testen of een bezoeker wel of niet een bepaalde rol heeft, dan wordt het iets ingewikkelder. Want hier kunnen twee situaties van toepassing zijn.
In de eerste situatie is iemand wel of geen cursist, maar is hij of zij gewoon niet ingelogd, het systeem kan dus onmogelijk bepalen, of iemand toegang heeft.
In de tweede situatie is iemand wel ingelogd, maar geen cursist.
Het eerste wat we dus moeten doen, is testen of iemand ingelogd is, en als dat het geval is, kijken we of hij een cursist is.
De code zou er als volgt uit kunnen zien
<?php
add_shortcode( 'notrole', 'notrole_check_shortcode' );
function notrole_check_shortcode( $atts, $content = null )
if (empty($atts['role']) {
return 'FOUT: Je moet een rol meegeven, anders valt er niets te controleren';
} else {
$role = ($atts['role']);
}
$user = wp_get_current_user();
if ($user) {
if ( in_array( $role, (array) $user->roles ) ) {
$show = false;
} else {
$show = true;
}
} else {
$show = true
}
if ( $show && !is_null( $content ) && !is_feed() )
return do_shortcode($content);
return '';
}
Kun je de code hier nog volgen? Het idee is als volgt. De functie wp_get_current_user() geeft de gegevens van de ingelogde gebruiker terug, of ‘false’ als er geen ingelogde gebruiker is.
De ‘show’ variabele krijgt een waarde van ‘false’, indien iemand is ingelogd, en de meegegeven rol heeft. Is iemand niet ingelogd, of heeft hij een andere rol, dan krijgt ‘show’ de waarde ’true’. En als deze de waarde ’true’ heeft wordt het bericht in ‘output’ getoond.
Hoe gebruik je dit nu in een shortcode?
[member role="student"]
Jij bent een cursist
[/member]
[notrole role="student"]
Jij bent geen cursist
[/notrole]
Om je content die alleen toegankelijk voor leden is te mixen met andere content, heb je hierboven inmiddels wat aardige voorbeelden gekregen om zelf je shortcodes te kunnen bouwen.
En wanneer je een basis expertise met betrekking tot PHP hebt, heb je wellicht ook enkele ideeën opgedaan om de code zelf aan te passen om aan jouw wensen te voldoen.
Meer code?
Dit artikel is duidelijk bedoeld voor zogenaamde ‘Powerusers’ van WordPress. Mensen die niet bang zijn om zelf af en toe een regeltje PHP code in te kloppen. Dit voorbeeld met betrekking tot hoe je jouw content alleen toegankelijk voor leden maakt, is slechts één van de vele mogelijkheden met shortcodes.
Stel je er prijs op vaker dit soort ‘diepte artikelen’ in de blog te zien, laat dit weten in het commentaar. Liefst met enkele suggesties waarover.
Zelf leren je website te bouwen met WordPress?
Wil je zelf je website bouwen met WordPress en Elementor Pro, kijk dan ook eens naar de cursus ‘Basiscursus Bouw Zelf je WordPress Website met Elementor Pro‘