Skrytí části obsahu pro nepřihlášené návštěvníky

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);
 
        }
 
    }
 
  }
Čtěte  Uložení custom fields k objednávce ve WooCommerce
$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 :-)

About The Author

Zajímá mne Wordpress, responsivní šablony a zkrátka vše kolem tohoto skvělého redakčního systému.

Related posts

4 Comments

  1. Radek P.

    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

    Reply
  2. Ivo

    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..

    Reply
  3. Jirka

    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

    Reply
  4. Meny

    Paráda, přesně tenhle ćlánek jsem hledal. Děkuji moc za rady a těším se na další nové posty.

    Reply

Leave a Reply

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *