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();
[zip href="http://iworks.pl/wp-content/uploads/2014/08/iworks-subset-latin-extended.php-.zip"]iworks_subset_latin_extended.php.zip[/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.

Poprzedni

WordUp Warszawa #3 – widget

Następne

Zgłoś się jako prelegent

7 komentarzy

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

    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. Marcin, dzięki za wtyczkę! Szybko i sprawnie naprawiłem dwa swoje blogi na dwa, opisane przez Ciebie sposoby :-)

  4. Kulin

    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 :)

    • @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).

  5. Dariusz

    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

2 pingbacki

  1. WordPress – kiedy nie działają polskie literki | Hekate Design
  2. Twenty Fourteen czy Twenty Twelve? | Łukasz Sobaniak

Oparte na WordPress & Theme by Anders Norén