Over dit onderwerp heb ik enkele jaren geleden een vrij uitgebreid artikel geschreven, waarin ik aangaf hoe je content in een blog kan tonen of verbergen. Ik behandel daar de opbouw van de code stap voor stap. Hier in de Snippet base, sla ik alle stappen die ik heb genomen even over en beperk mij tot het eindresultaat. Mocht je dieper geïnteresseerd zijn in de werking van de code, verwijs ik je graag naar mijn blogpost.
Let ook op : Ik heb de code enigszins aangepast om in overeenstemming te laten zijn met de afgesproken conventie voor de snippet base met betrekking tot prefixes. In de originele code gebruikte ik de prefix ‘member’.
De situatie
Binnen de content van een blogpost (of een pagina, les, of wat voor ander post type dan ook), wil ik bepaalde content alleen tonen aan ingelogde gebruikers met een bepaalde rol. Deze content wil ik tussen twee shortcodes ‘beschermen’. Daarnaast wil ik aan bezoekers duidelijk maken, dat alleen leden toegang hebben tot de content.
Ik wil de shortcode [member][/member] gebruiken om de content voor ingelogde gebruikers met een specifieke rol zichtbaar te maken.
Ik wil de shortcode [visitor][/visitor] gebruiken om de content voor niet ingelogde gebruikers zichtbaar te maken.
En tenslotte wil ik de shortcode [notrole][/notrole] gebruiken om de content voor ingelogde gebruikers, die niet een bepaalde rol hebben zichtbaar te maken.
Laten we met de shortcode voor de members beginnen.
Members
<?php
add_shortcode( 'member', 'wxp_member_check_shortcode' );
function wxp_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);
return '';
}
Het gebruik van deze shortcode is vrij eenvoudig
[member]Speciale kortingscode alleen voor leden: 123456[/member]
Visitors
De code voor bezoekers is eigenlijk kinderlijk eenvoudig. Het enige wat je hoeft te controleren is of de bezoeker niet is ingelogd.
<?php
add_shortcode( 'visitor', 'wxp_visitor_check_shortcode' );
function wxp_visitor_check_shortcode( $atts, $content = null ) {
if ( !is_user_logged_in() && !is_null( $content ) && !is_feed() )
return do_shortcode($content);
return '';
}
Dat is werkelijk alles. En nu de shortcode in het gebruik
[visitor]Het spijt mij, alleen leden hebben toegang. <a href="/inschrijven/">Klik hier om lid te worden</a>[/visitor]
Een eitje nietwaar?
Niet de juiste rol hebben…
De [notrol] check is iets ingewikkelder. Maar ook weer niet zoveel ingewikkelder dan de [member] check.
<?php
add_shortcode( 'notrole', 'wxp_notrole_check_shortcode' );
function wxp_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 '';
}
In een praktisch voorbeeld :
[member role="premium"]Gefeliciteerd, jij bent premium member[/member]
[notrole role="premium"]Als je premium member was geweest, had je iets leuks te lezen gekregen.[/notrole]