Kurs "WordPress: Pierwsze kroki" (na dobry początek)

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
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Kurs "WordPress: Pierwsze kroki" (na dobry początek)
Patryk
Tworzysz stronę internetową i potrzebujesz pomocy?