zażółć gęślą jaźń

Filtr dnia: style_loader_src – czyli zawsze* polskie znaki

Jak bumerang wraca temat polskich znaków w Google Fonts i tego że ich nie widać.

Gwiazdka w tytule oznacza pewne założenie. Otóż tym założeniem jest to, że dany krój pisma posiada polskie znaki diakrytyczne.

Jak dany krój nie posiada, to i tak nic nie pomoże.

Aby czcionka mogła wyświetlać musi być załadowany odpowiedni zestaw znaków, ten zestaw dla Polski nazywa się latin-ext.

Poniższy kod wykorzystuje filtr style_loader_src i dodaje odpowiednią definicję do każdej dodanej przez motyw czy wtyczkę czcionki google o ile ten krój został dodany za pomocą funkcji wp_enqueue_style. Jak kod dodany jest ręcznie … to nie pomoże. Wtedy trzeba się w kod pofatygować osobiście i dodać „&subset=latin,latin-ext”.

class iworks_subset_latin_extended
{
    public function __construct()
    {
        add_filter('style_loader_src', array($this,'style_loader_src'), 10, 2);
    }
 
    public function style_loader_src($src, $handle)
    {
        /**
         * check is google fonts url?
         */
        if ( !preg_match( '@fonts.googleapis.com/css@', $src ) ) {
            return $src;
        }
        $url = explode('?', $src);
        if ( sizeof($url) < 2 ) {
            return $src;
        }
        /**
         * parse arguments
         */
        $args = wp_parse_args($url[1]);
        /**
         * build subset array
         */
        $subset = array();
        if ( array_key_exists('subset', $args ) ) {
            $subset = explode(',', $args['subset']);
        }
        /**
         * add latin and latin-ext to subset
         */
        $subset[] = 'latin';
        $subset[] = 'latin-ext';
        /**
         * avoid duplicates
         */
        $args['subset'] = implode(',',array_unique($subset));
        /**
         * replace space to fiz add_query_arg
         */
        $args['family'] = preg_replace('/ +/', '+', $args['family']);
        return add_query_arg($args, $url[0]);
    }
}
 
new iworks_subset_latin_extended();

pobierz plik: iworks_subset_latin_extended.php.zip

Jak użyć podany kod?

Masz 3 rozwiązania:

  1. wrzuć załączony plik do folderu wp-content/plugins, a potem włącz wtyczkę
  2. wrzuć załączony plik do folderu wp-content/mu-plugins
  3. dołącz kod do pliku functions.php aktualnie używanego motywu

Uwaga!

Podana metoda działa TYLKO na czcionki osadzane z serwisu fonts.googleapis.com. Nie działa na inne, nie działa na takie z własnego serwera.

9 myśli na temat “Filtr dnia: style_loader_src – czyli zawsze* polskie znaki”

  1. bardzo fajne rozwiązanie! Dzięki Marcin, za sek wtyczka będzie na blogu klienta, bo autor skórki zapomniał, że mogą jej używać ludzie spoza anglojęzycznego internetu.
    Super, że działa jako wtyczka, bo do tej pory nadpisana funkcja była wyciągnięta do child theme żeby jej nie stracić przy aktualizacji skórki :)

  2. Kolejna ciekawa wtyczka z pod pióra Marcina. Próbuję ją zaimplementować na naszym blogu firmowym o tabletach, bo autor skórki miał chyba kłopot z polskimi znakami. Serdecznie pozdrawiam.

  3. Wrzuciłem do wp-content/plugins i włączyłem wtyczkę według pierwszego rozwiązania. Osobiście jednak wolę, gdy w wp-content/plugins są foldery o nazwie wtyczki i dopiero w folderze plik (pliki) od danej wtyczki. Jest to dla mnie bardziej przejrzyste. Tak też zrobiłem :)

    1. @Kulin: to tylko przykładowy kod. Cieszę się, że zrobiłeś z tego wtyczkę z folderem. „Jednoplikowość” jest istotna, bo tak powinno być w przypadku wtyczek wymuszanych (wp-content/mu-plugins).

  4. Witam, chcę zmodyfikować szablon Daily Notes theme.
    Niestety, nie potrafię osunąć braku polskich liter w tytułach. Pana wtyczka także niewiele pomogła. Jest inne rozwiązanie?
    Ile kosztuje opracowanie prostej strony?
    Pozdrawiam
    Dariusz

Możliwość komentowania jest wyłączona.

Jeżeli chcesz skomentować, napisz mail na adres marcin w domenie strony na której jesteś. Dodam twoj komentarz.