Jak policzyć ile znaków ma tytuł posta w Wordpress i jak go skrócić?
Do realizacji tego zadania wykorzystamy najpopularniejszą funkcję używaną w systemie WordPress. O jaką chodzi?
Na myśli mam funkcję the_title(). To tej wtyczki używają chyba wszyscy użytkownicy WordPressa, jest ona odpowiedzialna za wyświetlanie tytułu posta.
Ile znaków ma tytuł posta?
Głównym problemem jest domyślne zachowanie tej funkcji, nie trzeba jej wywoływać choćby za pomocą echo(). Można powiedzieć, że sama się wywołuje i nie jest konieczne używanie dodatkowych poleceń w PHP. Na co dzień jest to uproszczenie, w tym przypadku utrudnienie. Dlaczego?
W PHP jest funkcja, która liczy ilość znaków we wskazanej zmiennej - strlen().
<?php
$ileznakow = "ile jest tutaj znaków";
echo strlen($ileznakow);
?>
W odpowiedzi otrzymamy liczbę 21, sumę znaków w zmiennej $ileznakow. Jeśli zamiast zwykłego tekstu wstawimy funkcję the_title(), to otrzymamy zamiast sumy znaków, tytuł posta. Tu widzimy to utrudnienie, które można w łatwy sposób rozwiązać.
<?php
$ileznakow = the_title('', '', FALSE);
echo strlen($ileznakow);
?>
Jeśli umieścimy parametr FALSE w funkcji the_title() tytuł posta nie zostanie wywołany, tylko umieszczony w zmiennej $ileznakow.
Ograniczenie liczby znaków w tytule posta
Korzystając z powyższego można napisać krótki kod, który ograniczy wyświetlaną liczbę znaków w tytule. W przykładzie ograniczenie ustawimy na 30 znaków, po czym wyświetlimy użytkownikowi wielokropek.
<?php
if(strlen($post->post_title) > 30) {
echo substr(the_title($before = '', $after = '', FALSE), 0, 30) . '...';
} else {
the_title();
}
?>
Na początku korzystając z funkcji strlen() ustalamy liczbę znaków w tytule posta. Następnie stawiamy warunek, jeśli tytuł ma więcej znaków niż 30, to..
Jeśli warunek jest spełniony, czyli tytuł ma więcej niż 30 znaków to za pomocą funkcji substr() wyświetlamy pierwsze 30 znaków, potem stawiamy wielokropek. Jeśli warunek nie jest spełniony, wyświetlamy pełny tytuł.
Kategorie: WordPress. Tagi: #skrypty, #wordpress. Źródło obrazków: Pixabay, Font awesome.