Jeżeli pracujesz z WordPress, prawdopodobnie spotkałeś/aś się z wbudowaną funkcją get_the_excerpt
, używaną do wyświetlania zajawek we wpisach. Najczęściej widzianych na listach wpisów.
Funkcja działa w ten sposób, że gdy nie jest wypełnione pole zajawki, pobierana jest treść wpisu i skracana.
Niestety, ta funkcja często ucina słowa w połowie, lub źle przelicza długość zajawki kiedy używamy polskich liter.
Chciałbym zaproponować alternatywę dla wbudowanego get_the_excerpt
– funkcję get_excerpt
, która prawidłowo obsługuje skracanie tekstów zawierających znaki wielobajtowe UTF-8
.
Przy użyciu funkcji wielobajtowych (mb_substr
i mb_strrpos
) dostępnych w PHP, napisałem funkcję, która zapewnia, że skrócony tekst nie kończy się w połowie słowa i obsługuje tekst zawierający znaki UTF-8.
Kod funkcji get_excerpt:
function get_excerpt($limit, $id, $source = null)
{
$excerpt = $source == "content" ? get_post_field('post_content', $id) : get_post_field('post_excerpt', $id);
$excerpt = preg_replace(" (\[.*?\])", '', $excerpt);
$excerpt = strip_shortcodes($excerpt);
$excerpt = strip_tags($excerpt);
if (mb_strlen($excerpt, 'UTF-8') <= $limit) {
return $excerpt;
}
$limitedExcerpt = mb_substr($excerpt, 0, $limit, 'UTF-8');
$positionOfLastSpace = mb_strrpos($limitedExcerpt, " ", 0, 'UTF-8');
// Check if there is any space in the string
if ($positionOfLastSpace === false) {
return $limitedExcerpt;
}
$positionOfNextSpace = mb_strpos($excerpt, " ", $limit, 'UTF-8');
return mb_substr($excerpt, 0, $positionOfNextSpace, 'UTF-8');
}
Możesz umieścić powyższy kod w pliku functions.php
swojego motywu.
Teraz, zamiast używać wbudowanej funkcji get_the_excerpt
, możemy użyć funkcji get_excerpt
. Przykład użycia może wyglądać tak:
echo get_excerpt(200, get_the_ID(), 'excerpt');
Dzięki temu rozwiązaniu, możemy otrzymać skróconą zajawkę, która nie będzie ucinać słów w połowie.
Dodatkowo jako trzeci parametr do funkcji podajemy 'excerpt’ lub 'content’, w ten sposób możemy wybrać, która cześć wpisu ma zostać skrócona.
W razie potrzeby w łatwy sposób możemy przerobić funkcję tak by potrafiła skrócić jakikolwiek podany tekst.
Daj mi znać w komentarzach, czy ta funkcja była dla Ciebie pomocna, czy spotkałeś się z podobnymi problemami, lub masz jakieś pytania.