style_loader_tag
style_loader_tag è un'API ufficiale di WordPress, consultare la documentazione: https://developer.wordpress.org/reference/hooks/style_loader_tag/
apply_filters( 'style_loader_tag', $html, $handle, $href, $media )
Filtra il tag di collegamento HTML di uno stile accodato.
Prima accodare il foglio di stile, consultare la documentazione: 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 );
Il $handle
è 'font-awesome-5'
lo faccio null
in modo che non v'è alcun numero di versione. In questo modo verrà memorizzato nella cache.
Str_replace
semplice È sufficiente un semplice str_replace per ottenere ciò che si desidera, vedere l'esempio di seguito
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 );
Aggiungi attributi diversi
Sotto un esempio per aggiungere attributi diversi a (più) fogli di stile diversi
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 );
Aggiungi attributi a tutti gli stili
Di seguito un esempio per aggiungere gli stessi attributi a più di un foglio di stile
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
Vorrei anche spiegare script_loader_tag, perché anche questo è utile, ma questa API funziona in combinazione con wp_enqueue_script .
L'API script_loader_tag è quasi la stessa, solo alcune piccole differenze, consultare la documentazione: https://developer.wordpress.org/reference/hooks/script_loader_tag/
apply_filters( 'script_loader_tag', $tag, $handle, $src )
Filtra il tag di script HTML di uno script accodato.
Di seguito un esempio per rinviare un singolo script
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 seguito un esempio per rinviare più di uno script
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 );
Quindi ho spiegato sia API style_loader_tag
che script_loader_tag
. E ho dato alcuni esempi per entrambe le API, spero che questo sia utile per molte persone là fuori. Ho esperienza con entrambe le API.
AGGIORNAMENTO
@CKMacLeod Grazie per l'aggiornamento, questo chiarisce le cose. Siamo principalmente sulla stessa pagina. Come ho detto, sono uno sviluppatore di WordPress e se vuoi pubblicare un tema e / o un plugin su https://wordpress.org sei essenzialmente costretto a rispettare gli " Standard di codifica di WordPress " o semplicemente rifiuteranno il tuo tema e / o plugin.
Ecco perché incoraggio gli sviluppatori là fuori a usare "il modo WordPress". Capisco che a volte non ci sono differenze di sorta, ma è anche convenienza. Come hai detto tu stesso, puoi scaricare Font Awesome e includerlo nel tuo tema e / o plugin, in questo modo dovrai solo rimuovere la funzione style_loader_tag e modificare la tua funzione wp_enqueue_style.
E un'ultima cosa, in passato (5 anni fa) la memorizzazione nella cache, la combinazione e la minimizzazione dei plug-in non funzionava e la maggior parte delle volte avrei scoperto perché quegli sviluppatori che hanno creato il tema hanno semplicemente messo le cose in testa nel tema e / o li fece eco. La maggior parte dei plug-in di cache, che forniscono anche (la maggior parte delle volte) opzioni per combinare, minimizzare e ritardare l'esecuzione degli script, sono diventati più intelligenti e migliori nel rilevare codici errati e aggirarli. Ma questo non è preferito. Ecco perché incoraggio le persone a programmare con gli standard / le convenzioni in mente.
Come sviluppatore, devi sempre prendere in considerazione ciò che le persone potrebbero fare con il tuo codice e tenendo presente la compatibilità. Quindi non prendere la soluzione facile ma la migliore soluzione ottimale. Spero di aver chiarito il mio punto di vista.
EDIT
@CKMacLeod Grazie per il dibattito (tecnico), spero che tu capisca quanto sia importante (usando le API di WordPress nel tuo sviluppo). Ancora una volta, mi sono guardato intorno e anche ora se guardo le FAQ dei plugin minify più popolari di solito vedo questo in un modo o nell'altro, ad esempio:
Domanda: Perché alcuni dei file CSS e JS non vengono uniti?
Risposta: il plug-in elabora solo i file JS e CSS accodati utilizzando il metodo API WordPress ufficiale -
https://developer.wordpress.org/themes/basics/including-css-javascript/
-come anche i file dello stesso dominio (se non specificato sulle impostazioni).
Vedi le FAQ: https://wordpress.org/plugins/fast-velocity-minify/