Wp_register_style'a crossorigin ve bütünlük nasıl eklenir? (Font Awesome 5)


13

Font Awesome 4'ü <link rel="stylesheet">biçimlendirmeye hem bütünlük hem de crossorigin niteliklerini tanıtan sürüm 5'e yükseltiyorum .

Şu anda kullanıyorum:

wp_register_style('FontAwesome', 'https://example.com/font-awesome.min.css', array(), null, 'all' );
wp_enqueue_style('FontAwesome');

Hangi çıktılar:

<link rel="stylesheet" id="FontAwesome-css" href="https://example.com/font-awesome.min.css" type="text/css" media="all" />

Font Awesome 5 ile iki yeni özellik ve değer sunar ( integrityve crossorigin) örneğin:

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">

Ben wp_register_style için bütünlük ve crossorigin hem ekleyebilir öğrenmek gerek Yani, ben denedim ama kullanımına benim girişimleri wp_style_add_databaşarısız olmuştur, görünüşe göre bu yöntem yalnızca destekler olduğunu conditional, rtlve suffix, altve title.



Teşekkürler @ JacobPeattie, soru biraz farklı ama verilen cevap bu durumda uygulanabilir. Ancak 2016'ya kadar uzanıyor, belki şimdi daha az acayip görünen bir yol var ...
Pipo

@Pipo Ben bir WordPress geliştiricisiyim ve birkaç WordPress eklentisi yaptım, bazı özel yükleme yapmak için style_loader_tag ve script_loader_tag'ı çok kullanıyorum. Hatta komut dosyası etiketlerime erteleme ve zaman uyumsuzluk ekleniyor. Açık kaynak eklentimden birine bakın: github.com/Remzi1993/wp-jquery-manager
Remzi

@Pipo Ayrıca haklıydınız. Diğer yazı modası geçmiş ve bu artık işe yaramayacaktı. İlk örneğimde, bunu basit bir dize değiştirme ile nasıl yapabileceğinizi gösterdim. Biraz daha fazla bilgi verdim, böylece diğer insanlar bu bilgileri kullanabilirler
Remzi Cavdar

@JacobPeattie Bir göz atabilir misiniz? Bazı gramer hatalarım olabilir, İngilizce benim ikinci dilim
Remzi Cavdar

Yanıtlar:


16

style_loader_tag
style_loader_tag resmi bir WordPress API'sıdır, belgelere bakın: https://developer.wordpress.org/reference/hooks/style_loader_tag/

apply_filters( 'style_loader_tag', $html, $handle, $href, $media )
Sıkıştırılmış bir stilin HTML bağlantı etiketini filtreler.


İlk önce stil sayfanızı sıralayın, belgelere bakın: https://developer.wordpress.org/reference/functions/wp_enqueue_style/

wp_enqueue_style( 'font-awesome-5', 'https://use.fontawesome.com/releases/v5.5.0/css/all.css', array(), null );

$handleOlduğu 'font-awesome-5'
yapmam nullsürüm numarası olacak şekilde. Bu şekilde önbelleğe alınır.

Basit str_replace
İstediğinizi elde etmek için basit bir str_replace yeterlidir, aşağıdaki örneğe bakın

function add_font_awesome_5_cdn_attributes( $html, $handle ) {
    if ( 'font-awesome-5' === $handle ) {
        return str_replace( "media='all'", "media='all' integrity='sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU' crossorigin='anonymous'", $html );
    }
    return $html;
}
add_filter( 'style_loader_tag', 'add_font_awesome_5_cdn_attributes', 10, 2 );


Farklı
özellikler ekleme (Birden çok) farklı stil sayfasına farklı özellikler eklemek için bir örneğin altında

function add_style_attributes( $html, $handle ) {

    if ( 'font-awesome-5' === $handle ) {
        return str_replace( "media='all'", "media='all' integrity='sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU' crossorigin='anonymous'", $html );
    }

    if ( 'another-style' === $handle ) {
        return str_replace( "media='all'", "media='all' integrity='blajbsf' example", $html );
    }

    if ( 'bootstrap-css' === $handle ) {
        return str_replace( "media='all'", "media='all' integrity='something-different' crossorigin='anonymous'", $html );
    }

    return $html;
}
add_filter( 'style_loader_tag', 'add_style_attributes', 10, 2 );


Tüm stillere nitelik
ekleme Aynı nitelikleri birden fazla stil sayfasına eklemek için bir örnek aşağıda

function add_attributes_to_all_styles( $html, $handle ) {

        // add style handles to the array below
        $styles = array(
            'font-awesome-5',
            'another-style',
            'bootstrap-css'
        );

        foreach ( $styles as $style ) {
            if ( $style === $handle ) {
                return str_replace( "media='all'", "media='all' integrity='sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU' crossorigin='anonymous'", $html );
            }
        }

        return $html;
}
add_filter( 'style_loader_tag', 'add_attributes_to_all_styles', 10, 2 );




script_loader_tag
Ben de script_loader_tag açıklamak istiyorum, çünkü bu da kullanışlı, ama bu API wp_enqueue_script ile birlikte çalışır .

Script_loader_tag API'sı neredeyse aynı, sadece bazı küçük farklılıklar, belgelere bakın: https://developer.wordpress.org/reference/hooks/script_loader_tag/

apply_filters( 'script_loader_tag', $tag, $handle, $src )
Sıralanmış bir komut dosyasının HTML komut dosyası etiketini filtreler.


Tek bir komut dosyasını ertelemek için bir örnek aşağıda

function add_defer_jquery( $tag, $handle ) {
    if ( 'jquery' === $handle ) {
        return str_replace( "src", "defer src", $tag );
    }
    return $tag;
}
add_filter( 'script_loader_tag', 'add_defer_jquery', 10, 2 );


Birden fazla komut dosyasını ertelemek için bir örnek aşağıda

function add_defer_attribute( $tag, $handle ) {

    // add script handles to the array below
    $scripts_to_defer = array(
        'jquery',
        'jquery-migrate',
        'bootstrap-bundle-js'
    );

    foreach ( $scripts_to_defer as $defer_script ) {
        if ( $defer_script === $handle ) {
            return str_replace( "src", "defer src", $tag );
        }
    }

    return $tag;
}
add_filter( 'script_loader_tag', 'add_defer_attribute', 10, 2 );

Her iki API en açıkladık Yani style_loader_tagve script_loader_tag. Ve her iki API için bazı örnekler verdim Umarım bu bir sürü insan için faydalıdır. Her iki API ile deneyimim var.


UPDATE
@CKMacLeod Güncellemeniz için teşekkür ederiz, bu durum netleşir. Çoğunlukla aynı sayfadayız. Dediğim gibi, ben bir WordPress geliştiricisiyim ve https://wordpress.org adresinde bir tema ve / veya eklenti yayınlamak istiyorsanız, esasen " WordPress Kodlama Standartları " na uymak zorundasınız ya da sadece tema ve / veya eklenti.

Bu yüzden geliştiricileri "WordPress yolunu" kullanmaya teşvik ediyorum. Bazen hiçbir fark olmadığını anlıyorum, ama aynı zamanda kolaylık. Kendinizi söylediğiniz gibi, Font Awesome'i indirebilir ve temanıza ve / veya eklentinize ekleyebilirsiniz, bu şekilde sadece style_loader_tag işlevini kaldırmanız ve wp_enqueue_style işlevinizi değiştirmeniz gerekir.

Ve son bir şey, geçmişte (5 yıl önce) bazı önbellekleme, birleştirme ve küçültme eklentileri işe yaramadı ve çoğu zaman temayı yapan geliştiricilerin neden temayı kafasına koyduğunu ve / veya yankılandı. Ayrıca (çoğu zaman) komut dosyalarının yürütülmesini birleştirmek, küçültmek ve geciktirmek için seçenekler sunan çoğu önbellek eklentisi, kötü kodu tespit etmek ve bunların etrafında çalışmak için daha akıllı ve daha iyi hale geldi. Ancak bu tercih edilmez. Bu yüzden insanları standartları / sözleşmeleri göz önünde bulundurmaya teşvik ediyorum.

Bir geliştirici olarak, insanların kodunuzla neler yapabileceğini ve uyumluluğu dikkate alarak her zaman göz önünde bulundurmanız gerekir. Bu yüzden kolay çözümü değil, en iyi çözümü elde ediyoruz. Umarım bakış açımı netleştirdim.


@CKMacLeod EDIT (Teknik) tartışma için teşekkür ederim, umarım bunun ne kadar önemli olduğunu fark edersiniz (WordPress API'lerini kendi gelişiminizde kullanarak). Yine, etrafa bakıyordum ve şimdi bile en popüler küçültme eklentilerinin SSS'lerine bakarsam, genellikle bunu şu ya da bu şekilde görüyorum, örneğin:

Soru: Bazı CSS ve JS dosyaları neden birleştirilmiyor?
Yanıt: Eklenti yalnızca resmi WordPress API yöntemiyle ( https://developer.wordpress.org/themes/basics/include-css-javascript/ -as) ve aynı etki alanındaki dosyaları (belirtilmedikçe) kullanarak oluşturulan JS ve CSS dosyalarını işler. ayarlarda).

SSS'ye bakın: https://wordpress.org/plugins/fast-velocity-minify/


@Pipo Rica ederim :)
Remzi

RC - Yanıtınızın benimkinden daha iyi bir WordPress uygulaması olabileceğini düşünüyorum (ancak harici olarak barındırılan komut dosyalarını ve dosyaları sıraya koyma konusunda biraz daha araştırma yapmak isteyeceğim). Yine de, gerekçelerimiz konusunda net olmalıyız ve onları fazla satmamalıyız ve ayrıca 3. taraf hizmetlerini dahil etmek için doğru cevabın farklı bağlamlarda değişebileceğini kabul etmeliyiz. Bu notta, ikimizin de dikkate almadığı diğer cevap, iyi bir eklenti kullanmaktır - FA için Daha İyi Font Awesome gibi, çünkü güncelleme ve diğer görevleri iyi işleyebilirler.
CK MacLeod

Evet, FA için bir eklenti kullanmakta haklısın. Sadece devs bir WP teması oluştururken bu tercih edilir mi bilmiyorum. Genellikle temanıza her şeyi dahil etmek ve kutudan mümkün olduğunca az eklenti kullanmak istersiniz.
Remzi Cavdar


-1

@Remzi Cavdar tarafından script_ ve style_loader_tag incelemesi ilginçtir, ancak bazı öfke provoke etme riski altındadır ve birisinin bana WP kuyruğunu kullanmanın avantajının bu gibi durumlarda ne olacağını hatırlatabileceğini umuyorum, ' Kolayca çıkmanızı ve Fontawesome'in stil sayfasını kanca ile yüklemenizi tavsiye edeceğim.

/* ADD FONTAWESOME 5.5.0 via action hook */
add_action( 'wp_head', 'sewpd_add_fontawesome' );

function sewpd_add_fontawesome() {

echo '
<!--FONTAWESOME 5.5.0 added via functions.php -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
<!--END FONTAWESOME -->
'; 

}

Bazıları, FA'yı örneğin tema altbilgisindeki veya yayınlardaki bazı simgeler için kullanıyorsanız, sayfanın gövdesi içine daha düşük eklemeniz gerektiğini bile iddia edebilir, çünkü bu şekilde görünmeyecektir. render-blocking, ama itiraf ettim hiç yapmadım ... Ve ben doğrudan bir header.php veya başka bir şablon dosyasına eklemeyi tavsiye kadar ileri gitmeyeceğim. Bu yanlış olur. ;)

GÜNCELLEME

Remzi Cavdar, neden wp_head () kancasıyla Fontawesome veya benzer bir etiket eklemenin WordPress kuyruğunu kullanmaktan daha az istenebileceğine dair bir hatırlatma isteğimi yanıtlayacak kadar nazikti. Genellikle en iyi uygulamalar kavramını ve daha spesifik olarak önbellek eklentilerinin kuyruk aracılığıyla stil sayfasına erişmesi gerekebileceği fikrini ifade eder.

Ayrıntıya girmeden önce, bunun "WordPress Yolu" dışında önemli bir gerekçe bilmediğim halde, Cavdar Yoldaş'ın yaklaşımını sevdiğimi ve gelecekte kendim kullanabileceğimi söyleyeceğim. .

Ancak onun diğer iddiaları bana ikna edici değil. Belki o ya da bir başkası onlara ekleyebilir. Eğer öyleyse, tamamen kulaklarım. Alt satırda, anlayabildiğim kadarıyla, Pingdom ve GTMetrix üzerinde 20'den fazla test yaptıktan sonra bir test blogunda "sıra ile ekle" ile "kafa yoluyla ekle" yi karşılaştırdıktan sonra, kademeli performans açısından önemli ve tutarlı bir fark yoktur, iki yaklaşım arasındaki toplam sayfa isteği sayısı veya yükleme süreleri (ör. "İlk Boyama", "İlk İçerikli Boyama" ve "OnLoad").

Özellikle önbelleğe alma ile ilgili olarak, önbelleğe alma eklentileri WP kuyruğuna eklenmiş olsun veya olmasın harici olarak barındırılan dosyalarla çok fazla iş yapamaz. Dosyaların kendileri etkilenmeden kalır ve sayfanız yine de her biri için bir istek oluşturur.

Daha genel olarak, senaryoları ve stilleri yüklemek için çok çeşitli yaklaşımlar gördüm. Bazıları WP kuyruğunu kısmen ya da tamamen atlar. Örneğin, Fontawesome veya diğer 3. Taraf Etiketlerin sıkıştırılmasının marjinal olarak yararlı olacağı ve belirli sayfalara yüklenmesini önlerken bir dizi stil tutamağını kullanan bir işlev olacağı ve bu durumun ilk konuşlandırmanın fonksiyonlar - sıkma ve filtreleme - basitçe bir tane yüklemek yerine daha cimri hale gelecektir.

FA durumunda, stil sayfası zaten küçültülmüş ve FA'nın kendi CDN'si aracılığıyla yüklenmiştir. Performans üzerindeki asıl etkisi asgari düzeyde olacak, ancak wp_head () veya kuyruk aracılığıyla yüklenmiş olsa da, performans greyderlerinde birden fazla noktada - yine de Google Page Speed ​​Insights ve yukarıda belirtilen GTMetrix ve Pingdom gibi - bir veya daha fazla görüntü dosyasını yeniden optimize etmek için birkaç bayt (kilobayt bile değil) kaydetmemeniz için bir performans noktası yerleştirir.

Kuyruk yerine wp_head yoluyla yükleme, "doğru komut dosyaları ve stiller sırası" kontrolünü (yerel olarak barındırılan dosyalardan sonra harici olarak barındırılan dosyayı yüklemek için başka biri sizi daha yüksek dereceli olsa da) kontrol edebilir, ancak yükleme konusunda gerçekten endişeleniyorsanız FA siteniz için mümkün olan en iyi şekilde, ardından dosyalarını ve alt dosyalarını yerel olarak barındırmayı denersiniz, hem stili hem de stil sayfasının @ font-face üzerinden çağırdığı fontlar. Bu durumda, stil sayfasını tıpkı diğer yerel dosyalar gibi sıralayabilir, optimize edici bir eklenti veya doğrudan "elle" birleştirebilir ve birleştirebilirsiniz. Kendi harika Fontawesome değişikliklerinizi bile yapabilir ve bunları tema stil sayfanıza ve yapınıza entegre edebilirsiniz. Veya (daha önce kısaca bahsedildiği gibi), belirli bir sayfanın yapısında ihtiyaç duyulmadan hemen önce CSS satır satırını eklemek gibi daha egzotik performans optimizasyonu taktiklerini deneyebilirsiniz.

Her neyse, yeni "bütünlük" ve "kökenler arası" etiketler için endişelenmenize gerek kalmayacak ve ayrıca bir gün Fontawesome'in CDN faturasını ödemeyi unutması durumunda endişelenmenize gerek kalmayacak.

Ya da, başlık sayfaları altında zaten tam bir karmaşaya sahip bir sitede çalışıyor olabilirsiniz, stil sayfaları ve komut dosyaları her şekilde yüklenir ve yalnızca en son eklemenizi function.php dosyasının en üstüne yerleştirmek daha kolay olabilir, böylece siz veya bir sonraki geliştirici bunu kolayca bulabilir ...


Ben de merak ediyorum, bu şekilde yapmanın ya da doğrudan bir tema dosyasına eklemenin dezavantajı nedir?
18:52, Jersh

Bakış açınız için teşekkür ederiz, tek şey, çözümünüzün çok sayıda küçültme ve önbellekleme eklentisini hayal kırıklığına uğratacağıdır. Gibi: wordpress.org/plugins/fast-velocity-minify , wordpress.org/plugins/wp-fastest-cache ve etca ....
Remzi

1
Diğer eklentiler, uygun şekilde sıralandıkları takdirde stil sayfalarını ve komut dosyalarını işleyebilir, kodunuzu doğrudan kafaya koyarsanız, bu eklentiler, ön siparişle küçültülemez, birleştirilemez ve önbellek oluşturulamaz.
Remzi Cavdar

Remzi Cavdar: Cevabınız için teşekkürler, ancak cevabımı düzenlemeden ve ortaya koyduğunuz sorunları ayrıntılı olarak ele almadan önce, özellikle Fontawesome ile ilgili veya genel olarak bunun gibi diğer stil sayfalarıyla ilgili herhangi bir örneğiniz olup olmadığını merak ediyorum. zaten küçültülmüş ve harici olarak barındırılıyor.
CK MacLeod

1
"Wordpress yolu" eklentilerle maksimum uyumluluk sağlar. CDN'den bir şeyler almak veya bazı belirli sayfaların bağlantısını kaldırmak için olsun, kodu gerçekten düzenlemeden mümkün olmaz.
İnançların
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.