Jedním z často řešených problémů ve WordPressu, je zobrazení, nebo skrytí části obsahu pro přihlášené, či nepřihlášené uživatele. Doporučují se různé pluginy, jenž jsou nezřídka zbytečně robustní a jejich použití zatěžuje WordPress dalším zbytečným kódem.
Netvrdím, že nemají své místo, pokud potřebujete mít například uživatelský účet na frontendu, ale co když nic takového nepotřebujete.
Stačí vám jen skrýt reklamní prvek v článku, aby neobtěžoval zaregistrované čtenáře? Řada těchto pluginů neumí skrývat jen část obsahu.
Naštěstí má WordPress k dispozici shortkódy a dnes vám ukáži, jak jeden takový vytvořit a skrýt s ním část obsahu pro přihlášené uživatele.
Shortcode
Samotnou funkci pro shortcode musíme nejprve zaregistrovat pomocí add_shortcode
add_shortcode('hide-content', 'hide_content' ); |
Dalším krokem je samotná funkce shortcodu:
function hide_content($atts, $content){ $logged = true; if(!empty($atts['logged'])){ if($atts['logged'] == 'no'){ $logged = false; } } $show = true; if(!empty($atts['show'])){ if($atts['show'] == 'no'){ $show = false; } } //Content for logged user if($logged){ if(is_user_logged_in() && $show === true){ return do_shortcode($content); } }else{ //Content for non logged user if(!is_user_logged_in() && $show === true){ return do_shortcode($content); } } } |
Vysvětlení funkce:
V shortcodu budeme používat dva atributy, „logged“ pro určení, zda se jedná o prihlášeného uživatele a atribut „show“, kterým určíme, zda se má obsah zobrazit, či ne.
Nyní máme k dispozici shortcode, do kterého „obalíme“ obsah, který chceme skrýt pro přihlášeného uživatele:
[hide-content logged="yes" show="no"] <p>Obsah vidíte, protože jste nepřihlášení!</p> [/hide-content] |
A to je vše. Pro nepřihlášené skryjete obsah analogicky.
Dovedu si představit model – zaregistrujte se a zmizí všechny otravné reklamy :-)
Jednoduché, elegantní. Zrovna nedávno jsem uvažoval, jak vlastně skrývání částí obsahu funguje. Plugin se mi používat nechtělo. Díky zaneprázdnění jsem to nedořešil. Tj. díky, už nemusím, naservírováno až pod nos
Parádní článek, přesně takové řešení bych potřeboval, pluginy jsou zlo, ale mám pro tebe asi triviální otázku – kam ten kód mám napsat? Do nějakého init.php či něco podobného? Zdrojáky WP jsem se nikdy moc neprobíral..
Ahoj, děkuju za článek. Chtěl bych se zeptat, jak by se dalo vyřešit menu? Představoval bych si to tak, že bych měl v menu položku „Registrace/přihlášení“, po kliknutí bych na stránce měl shortcody s registrací a loginem. Pokud by se uživatel přihlásil, tzn.: logged=true, položka v menu by se změnila na „Odhlásit“.
Za každou radu budu vděčný, popřípadě, jestli na to existuje plugin?
Děkuji
Paráda, přesně tenhle ćlánek jsem hledal. Děkuji moc za rady a těším se na další nové posty.