Jak ukryć treść dla niezalogowanych

Dzisiaj temat w jakim dłubałam dosłownie przed chwilą, akurat nie na mojej stronie, a na stronie, w której dłubię dla kogoś. Pokażę Ci jak ukryć treść dla niezalogowanych użytkowników w WordPressie. I nie chodzi mi tutaj o ukrycie całej strony, tylko jakiegoś kawałka, którego nie chcemy pokazywać niezalogowanym użytkownikom. Albo odwrotnie, czyli chcemy coś właśnie pokazać tylko niezalogowanym, jak np. jakieś przyciski zakupowe lub reklamy naszych produktów.

Shortcode

Żeby ukryć jakieś treści użyjemy sobie czegoś, co nazywa się shortcodem. Musimy go sobie najpierw stworzyć i przy jego pomocy w wygodny sposób będziemy ukrywać treści na podstawie jakiegoś warunku.

Szukałam jakiejś eleganckiej definicji czym ten shortcode jest, ale nie znalazłam nic, co by mnie zadowalało więc postaram się to wyjaśnić po swojemu. Shortcode pozwala na otrzymanie jakiegoś efektu małym nakładem pracy. Jest taką skróconą formą dodawania jakichś nowych właściwości do naszej strony, które normalnie wymagałyby sporej ilości kodu.

Shortcode ma formę: [nazwa_shortcode]. Czyli nazwa shortcode’a musi się znaleźć w nawiasach kwadratowych. Na swojej stronie korzystam na przykład ze slidera z referencjami (testimonials) dla mojego motywu. Ma on taką formę: [gts-slider]. Tam, gdzie wrzucę ten shortcode wyświetlą mi się właśnie te referencje na podstawie konfiguracji, jaką sobie ustawiłam we wtyczce.

Dodam tylko, że shortcode może mieć także jakieś parametry oraz, że istnieje coś takiego jak shortcode w takiej formie: [nazwa_shortcode]Jakaś treść[/nazwa_shortcode]. Czyli tutaj mamy coś w rodzaju taga otwierającego i zamykającego, a pomiędzy treść, z którą możemy coś zrobić. I właśnie w taki sposób zbudujemy nasz shortcode do ukrywania treści.

Na shortcode poświęcę osobny wpis, na razie tyle plus przykład, który zaraz pokażę, musi wystarczyć.

Ukrycie treści dla niezalogowanych

Najpierw stwórzmy pustą funkcję i dodajmy shortcode. Funkcję taką możemy wrzucić do functions.php w motywie potomnym.

function automatela_hide_content( $atts, $content ) {	
	
}
add_shortcode( 'hidden', 'automatela_hide_content' );

Nasz shortcode jeszcze nic nie robi. Parametr $content to treść, jaka się znajdzie pomiędzy tagiem otwierającym [hidden] i zamykającym [/hidden], czyli treść, którą chcemy ukryć dla niezalogowanych. Nazwę taga, czyli hidden, określiliśmy w metodzie add_shortcode.

Żeby sprawdzić, czy użytkownik wyświetlający daną stronę jest zalogowany czy nie, użyjemy funkcji is_user_logged_in(). Stworzymy sobie więc instrukcję warunkową, która wykona podaną przez nas akcję, jeżeli użytkownik będzie zalogowany.

function automatela_hide_content( $atts, $content ) {		
	if ( is_user_logged_in()) {
		return $content;
	}
}
add_shortcode( 'hidden', 'automatela_hide_content' );

W powyższym kodzie sprawdzamy czy użytkownik jest zalogowany i jeżeli jest, to pokazujemy mu treść, która znajduje się między znacznikami. Natomiast w innym wypadku nie robimy nic i nic nie zwracamy. Oznacza to, że niezalogowany użytkownik nie zobaczy treści pomiędzy znacznikami [hidden] oraz [/hidden].

Jeżeli chcesz odwrócić warunek, czyli pokazać coś dla niezalogowanych użytkowników, czego zalogowanym nie pokażesz to wystarczy, że zmienisz warunek, tj. wstawisz !is_user_logged_in() zamiast is_user_logged_in(). Ten wykrzyknik na początku odwróci warunek.

Użycie

Mając już taki shortcode możemy go użyć w każdym miejscu, w którym użycie shortcode’ów jest możliwe. Wyobraź sobie, że na jakiejś stronie albo w poście masz komunikat, który ma być widoczny tylko dla zalogowanych użytkowników, np.:

<div class="notice"><p>Faktury za czerwiec są już dostępne do pobrania na <a href="/moje-konto/">Twoim koncie</a></p></div>

Żeby ukryć go dla niezalogowanych użytkowników, wystarczy go otoczyć tagami:

[hidden]<div class="notice"><p>Faktury za czerwiec są już dostępne do pobrania na <a href="/moje-konto/">Twoim koncie</a></p></div>[/hidden]

A co jeżeli w środku jest jeszcze jeden shortcode?

Jeżeli w treści, którą chcemy w ten sposób ukryć pojawi się jeszcze jeden shortcode, nie zostanie ona poprawnie sparsowana. Shortcode ze środka zostanie potraktowany jak zwykły kawałek HTMLa. Spójrz na przykład poniżej:

[hidden]<div class="notice"><p>Faktury za [month] są już dostępne do pobrania na <a href="/moje-konto/">Twoim koncie</a></p></div>[/hidden]

W stosunku do tego co widzieliśmy wcześniej doszedł tutaj shortcode [month], który zwraca poprzedni miesiąc. Znajduje się on razem z kawałkiem HTMLa wewnątrz tagów [hidden] oraz [/hidden]. Ponieważ tak jak już wspomniałam, taka treść nie zostanie poprawnie sparsowana, to co zobaczy zalogowany użytkownik to komunikat takiej treści:

Faktury za [month] są już dostępne do pobrania na Twoim koncie

Żeby [month] został potraktowany jak shortcode, potrzebujemy lekko zmodyfikować naszą funkcję:

function automatela_hide_content( $atts, $content ) {		
	if ( is_user_logged_in()) {
		return do_shortcode($content);
	}
}
add_shortcode( 'hidden', 'automatela_hide_content' );

Funkcja do_shortcode szuka w treści shortcode’ów i jeżeli takie znajdzie, wyfiltruje je i zinterpretuje właśnie jako shortcode.

Dodaj komentarz