Jak poprawnie skracać fragmenty the_excerpt?

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_substrmb_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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *