Shortcodes voor het tonen en verbergen van content

Hoe maak ik een shortcode waarmee ik content van mijn posts kan verbergen?

Wil je direct een mail ontvangen wanneer nieuwe snippets zijn toegevoegd?

Vul dan onderstaand formulier in en je krijgt direct na het toevoegen van nieuwe snippets een email. Zo blijf je altijd bij!

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]

Codesnippet verbeteren

Het doel van deze code snippet is een probleem op te lossen in een specifieke situatie. Daarom zie je regelmatig voorbeelden waar je specifiek tekst moet aanpassen om te krijgen wat je wilt. 

Wil jij leren hoe je complete plugins zelf kunt programmeren inclusief ‘admin’ schermen voor het instellen en de output in de gewenste taal, dan is misschien de cursus ‘Introductiecursus Plugins Programmeren‘ iets voor jou. 

Wil je als ‘full stack’ WordPress programmeur aan de gang gaan, dan biedt WordXPression ook een compleet traject ‘WordPress Developer‘ aan. Dit is een traject wat deels online, deels klassikaal wordt gegeven.

WordPress Developer worden?

Wil je leren hoe je zelf plugins, thema's, shortcodes, widgets, Gutenberg blocks en meer kan maken?
Schrijf je dan in voor de cursus WordPress Developer.

Meer snippets

Stuur je bezoeker naar een 'dank je' pagina na commentaar
In enkele regels stuur je je bezoeker naar een 'bedankt pagina'.
De webwinkel is op zondag gesloten
Het voordeel van een webshop is dat hij 24/7 open is. Maar wat nu, wanneer je op zon- en feestdagen principieel...
WooCommerce product titel inkorten
Past de titel in je WooCommerce product matrix niet? Zo pas je het aan.
De presentatie van variabele producten hun prijs verbeteren
Een variabel product wordt in WooCommerce weergegeven als een prijs €100-€250 in plaats van 'vanaf €...
Datum laatste wijziging toevoegen in een Elementor Post info widget.
Ik wil in Elementor op mijn blogpagina zowel de datum waarop een blog is geschreven, als de datum laatste...
Koopsuggesties op basis van eerdere orders toevoegen
Het codefragment in deze snippet maakt onderdeel uit van een wat groter project. In het blogartikel ‘Flexibel...

Veiligheid voor alles!

Met betrekking tot de code die je hier aantreft een aantal waarschuwingen, voordat je deze code snippets toepast op je eigen website.

  1. Voer de code nooit direct uit op je eigen website, maar probeer deze eerst op een staging omgeving of een locale kopie van je website. 
  2. Voor je de geteste code installeert op je website, maak eerst een back up van je website.
  3. Zorg altijd voor alle zekerheid, dat je voor je een aanpassing live zet, je ook de FTP gegevens van je website bij de hand hebt.  
 
Voel je je onvoldoende vertrouwd met het toepassen van een dergelijke code snippet, bedenk dat je dit ook door een professional kan laten doen. De WordXPression support strippenkaart is een voordelige manier om dit soort aanpassingen te laten doen.
Heeft dit artikel je geholpen je probleem op te lossen?
Deel het met je vrienden via je favoriete social media.

Heb je vragen bij, of opmerkingen over deze code snippet, stel deze bij de commentaren hieronder.

Geef een reactie

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

Word je website de baas. Neem vandaag nog contact op!

Contact Informatie

Helaas is telefoonspam een serieus probleem geworden. Omdat ik dagelijks tientallen ‘spam’ en ‘scam’ telefoontjes ontving, heb ik mijn telefoonnummer van de site verwijderd. 

Wanneer je echter het formulier hiernaast invult, en aangeeft dat je per telefoon contact op wilt nemen, maak ik graag een belafspraak met je op een moment wat ons beiden past. En krijg je gewoon het telefoonnummer van WordXPression, zodat je ieder moment kan bellen.

WordXPression 

Aardoliestraat 14-I 7553GT Hengelo

KVK : 75580152 

Stuur een bericht

Mocht je interesse hebben in een nieuwe WordPress of WooCommerce website, verzoek ik je niet onderstaand formulier in te vullen, maar gebruik te maken van het intake/offerte formulier

WordXPression is WP Digital Marketing Geworden

In oktober 2010 begon ik met WordXPression. De naam zei eigenlijk precies wat ik toen deed: dienstverlening rond WordPress. Websites bouwen, aanpassen, onderhouden en later ook steeds meer maatwerk ontwikkelen.

Maar WordXPression is in de loop van de jaren nooit alleen WordPress geweest. Voor klanten voerde ik ook andere werkzaamheden uit. Soms kwamen die rechtstreeks voort uit een WordPress-project, bijvoorbeeld wanneer een website gekoppeld moest worden aan een ander systeem. Soms lag de oorsprong heel ergens anders: in mijn jarenlange ervaring als system integrator uit de periode voordat ik met WordXPression begon.

Daarom besloot ik in 2017 de officiële naam van mijn bedrijf te veranderen in WP Digital Marketing. WordXPression bleef daarbij bestaan als handelsnaam en bleef ook de naam waaronder de website en het grootste deel van mijn dienstverlening naar buiten traden.

De afgelopen jaren is die verhouding steeds verder veranderd. Naast WordPress zijn vooral Laravel, maatwerkapplicaties en systeemintegraties een steeds belangrijker deel van mijn werkzaamheden geworden. WordPress blijft belangrijk, maar het is niet langer een goede paraplu voor alles wat ik doe.

Daarom wordt het tijd om de naam die al sinds 2017 boven het bedrijf staat, ook daadwerkelijk centraal te stellen.

Vanaf 1 oktober gaat WordXPression verder als WP Digital Marketing.