style_loader_tag
style_loader_tag adalah API WordPress resmi, lihat dokumentasi: https://developer.wordpress.org/reference/hooks/style_loader_tag/
apply_filters( 'style_loader_tag', $html, $handle, $href, $media )
Memfilter tag tautan HTML dengan gaya enqueued.
Pertama enqueue stylesheet Anda, lihat dokumentasi: 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 );
The $handle
adalah 'font-awesome-5'
saya lakukan null
agar tidak ada nomor versi. Dengan cara ini akan di-cache.
Simple str_replace Str_replace
sederhana sudah cukup untuk mencapai apa yang Anda inginkan, lihat contoh di bawah ini
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 );
Tambahkan atribut yang berbeda
Di bawah ini contoh untuk menambahkan atribut yang berbeda ke (beberapa) lembar gaya yang berbeda
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 );
Tambahkan atribut ke semua gaya
Di bawah contoh untuk menambahkan atribut yang sama ke lebih dari satu lembar gaya
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
Saya juga ingin menjelaskan script_loader_tag, karena ini juga berguna, tetapi API ini bekerja dalam kombinasi dengan wp_enqueue_script .
API script_loader_tag hampir sama, hanya beberapa perbedaan kecil, lihat dokumentasi: https://developer.wordpress.org/reference/hooks/script_loader_tag/
apply_filters( 'script_loader_tag', $tag, $handle, $src )
Memfilter tag skrip HTML dari skrip enqueued.
Di bawah ini adalah contoh untuk menunda satu skrip
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 );
Di bawah ini adalah contoh untuk menunda lebih dari satu skrip
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 );
Jadi saya sudah menjelaskan API style_loader_tag
dan script_loader_tag
. Dan saya memberikan beberapa contoh untuk kedua API. Saya berharap ini bermanfaat bagi banyak orang di luar sana. Saya memiliki pengalaman dengan kedua API itu.
UPDATE
@CKMacLeod Terima kasih atas pembaruan Anda, ini menjelaskan beberapa hal. Kami kebanyakan berada di halaman yang sama. Seperti yang saya katakan, saya adalah pengembang WordPress dan jika Anda ingin menerbitkan tema dan / atau plugin di https://wordpress.org Anda pada dasarnya dipaksa untuk mematuhi " Standar Pengodean WordPress " atau mereka hanya akan menolak Anda tema dan / atau plugin.
Itu sebabnya saya mendorong pengembang di luar sana untuk menggunakan "cara WordPress". Saya mengerti bahwa kadang-kadang tidak ada perbedaan apa pun, tetapi juga kenyamanan. Seperti yang Anda katakan sendiri, Anda dapat mengunduh Font Awesome dan memasukkannya ke dalam tema dan / atau plugin Anda, dengan cara ini Anda hanya perlu menghapus fungsi style_loader_tag dan memodifikasi fungsi wp_enqueue_style Anda.
Dan satu hal terakhir, di masa lalu (5 tahun yang lalu) beberapa caching, menggabungkan dan mengecilkan plugin tidak bekerja dan sebagian besar waktu saya akan mencari tahu mengapa para pengembang yang membuat tema hanya meletakkan hal-hal di kepala dalam tema dan / atau menggema mereka. Sebagian besar plugin caching, yang juga (sebagian besar waktu) menyediakan opsi untuk menggabungkan, memperkecil, dan menunda eksekusi skrip menjadi lebih pintar dan lebih baik dalam mendeteksi kode yang buruk dan mengatasinya. Tapi ini tidak disukai. Itu sebabnya saya mendorong orang untuk kode dengan standar / konvensi dalam pikiran.
Sebagai pengembang, Anda selalu perlu mempertimbangkan apa yang dapat dilakukan orang dengan kode Anda dan mempertimbangkan kompatibilitas. Jadi tidak mengambil solusi mudah tetapi solusi optimal terbaik. Saya harap saya telah mengklarifikasi sudut pandang saya.
EDIT
@CKMacLeod Terima kasih atas debat (teknis), saya harap Anda menyadari betapa pentingnya hal ini (menggunakan WordPress API dalam pengembangan Anda sendiri). Sekali lagi, saya telah melihat-lihat dan bahkan sekarang jika saya melihat FAQ tentang plugin minify paling populer, saya biasanya melihat ini dengan satu atau lain cara, misalnya:
Pertanyaan: Mengapa beberapa file CSS dan JS tidak digabung?
Jawaban: Plugin ini hanya memproses file JS dan CSS yang dibuat menggunakan metode WordPress API resmi -
https://developer.wordpress.org/themes/basics/includes-css-javascript/
-serta file dari domain yang sama (kecuali ditentukan pada pengaturan).
Lihat FAQ: https://wordpress.org/plugins/fast-velocity-minify/