Zapytała mnie znajoma, czy mógłbym na jej stronie dodać pewną „drobną funkcjonalność”, taką z typu „na pewno nie zajmie Ci to dużo czasu”. Mógłbym, a jakże, najwyżej się jakoś rozliczmy, a następnie wspólnie rozliczenie skonsumujemy… ;-)

Przy okazji w pliku functions.php trafiłem na ciekawy fragment kodu, który z jednej strony idealnie spełniał swoje zadanie, ale z drugiej strony – zadanie spełniał to idealnie właściwie tylko z przypadku.

Prefiksy „prywatny” i „zabezpieczony” w WordPressie

Standardowo w WordPressie możemy opublikować wpis nie tylko jako w pełni publiczny, widoczny dla każdego (o ile nie mamy jakichś dodatkowych ograniczeń), ale również jako prywatny – widoczny tylko dla zalogowanych użytkowników, oraz zabezpieczony hasłem, którego treść jest widoczna… po podaniu hasła.

Wpisy te w większości przypadków są dodatkowo oznaczone w tytule:

  • Zabezpieczony: Standardowy tytuł wpisu (postu, artykułu, zwał jak zwał)
  • Prywatny: Standardowy tytuł wpisu (postu, artykułu, zwał jak zwał)

Niby nie ma w tym nic strasznego, a nawet niektórym takie dodatkowe oznaczenie może się podobać, to sporo osób decyduje się na ukrycie tych dodatkowych prefiksów.

Tak też było u znajomej, gdzie w pliku functions.php (jeden ze sposobów na dodanie własnego kodu do WordPressa) znajdował się wpis w stylu (z pamięci, ale nie jest to zbyt skomplikowane do odtworzenia):

function webinsider_wp_remove_title_prefix ( $title ) {
 $title = str_replace('Prywatny: ', '', $title );
 $title = str_replace('Zabezpieczony: ', '', $title );
 return $title;
}
add_filter( 'the_title', 'webinsider_wp_remove_title_prefix' );

Jak już wspomniałem – powyższy kod działał, ale ma on jedną zasadniczą wadę: usunie z tytułu każde wystąpienie „Prywatny:” i/lub „Zabezpieczony:”, niezależnie, czy będzie to oznaczenie związane ze sposobem upublicznia treści, czy też będzie w tytule jako normalny jego składnik.

Jeśli miałbym trzymać się tej metody, to sięgnął bym po wyrażenia regularne, dzięki czemu mogę skrypt zaprogramować tak, by usuwał oznaczenia tylko gdy tytuł się od nich zaczyna (pierwsze wystąpienie):

function webinsider_wp_remove_title_prefix ( $title ) {
 $title = preg_replace( "/(^Prywatny: )/", "", $title );
 $title = preg_replace( "/(^Zabezpieczony: )/", "", $title );
 return $title;
}
add_filter( 'the_title', 'webinsider_wp_remove_title_prefix' );

Można też obie regułki połączyć w jedną, która będzie wyłapywać 2 oznaczenia (magia wyrażeń regularnych):

function webinsider_wp_remove_title_prefix ( $title ) {
 $title = preg_replace( "/(^Prywatny: |^Zabezpieczony: )/", "", $title );
 return $title;
}
add_filter( 'the_title', 'webinsider_wp_remove_title_prefix' );

I wprawdzie taka konstrukcja sprawdzi się dużo lepiej, to cały czas istnieje ryzyko, że z rozpędu (i potrzeby) tytuł jakiegoś wpisu będziemy chcieli zacząć od „Prywatny:” lub „Zabezpieczony:”, co oczywiście zniknie z tytułu.

Dużo lepszym i bezpieczniejszym rozwiązaniem jest skorzystać z 2 filtrów, które są dostepne bezpośrednio w WordPressie:

function webinsider_wp_remove_title_prefix( $format ) {
 return '%s';
}
add_filter( 'protected_title_format', 'webinsider_wp_remove_title_prefix' ); // Zabezpieczony: [...]
add_filter( 'private_title_format', 'webinsider_wp_remove_title_prefix' ); // Prywatny: [...]

Efekt identyczny, ale z racji tego, że w tym przypadku WordPress nie doda prefiksów, to tym samym nie musimy ich dodatkowo usuwać, i mamy pewność, że z tytułu „przypadkowo” nie znikną fragmenty „Prywatny:” i „Zabezpieczony:” (oczywiście, jeśli ich użyjemy).

Zgłoś błąd na stronie

Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!

WebInsider poleca księgowość wFirma
WebInsider korzysta z VPSa w HitMe.pl
WebInsider poleca VPSy DigitalOcean
WebInsider poleca serwis Vindicat
Napisz komentarz
wipl_napisz-komentarz_01Jeśli informacje zawarte na tej stronie okazały się pomocne, możesz nam podziękować zostawiając poniżej swój komentarz.

W tej formie możesz również zadać dodatkowe pytania dotyczące wpisu, na które - w miarę możliwości - spróbujemy Ci odpowiedzieć.
Linki partnerskie
Niektóre z linków na tej stronie to tzw. "linki partnerskie", co oznacza, że jeśli klikniesz na link i dokonasz wymaganej akcji (np. zakup/rejestracja) możemy otrzymać za to prowizję. Pamiętaj, że polecamy tylko te produkty i usługi, z których sami korzystamy, i uważamy, że są tego na prawdę warte... :-)
Znaki towarowe i nazwy marek
W niektórych wpisach (oraz innych miejscach na stronie) mogą być przedstawione/użyte znaki towarowe i/lub nazwy marek, które stanowią własność intelektualną tych podmiotów, a zostały użyte wyłącznie w celach informacyjnych.

Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!