style_loader_tag
style_loader_tag ist eine offizielle WordPress-API. Weitere Informationen finden Sie in der Dokumentation: https://developer.wordpress.org/reference/hooks/style_loader_tag/
apply_filters( 'style_loader_tag', $html, $handle, $href, $media )
Filtert das HTML-Link-Tag eines in die Warteschlange gestellten Stils.
Stellen Sie zuerst Ihr Stylesheet in die Warteschlange, siehe Dokumentation: 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 );
Das $handle
ist 'font-awesome-5'
ich tun , null
so dass es keine Versionsnummer. Auf diese Weise wird es zwischengespeichert.
Einfacher str_replace
Ein einfacher str_replace reicht aus, um das zu erreichen, was Sie wollen (siehe Beispiel unten)
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 );
Hinzufügen verschiedener Attribute Im
Folgenden finden Sie ein Beispiel zum Hinzufügen verschiedener Attribute zu (mehreren) verschiedenen Stylesheets
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 );
Hinzufügen von Attributen zu allen Stilen Im
Folgenden finden Sie ein Beispiel zum Hinzufügen derselben Attribute zu mehr als einem Stylesheet
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
Ich möchte auch den script_loader_tag erklären, da dies ebenfalls praktisch ist, aber diese API funktioniert in Kombination mit wp_enqueue_script .
Die script_loader_tag-API ist fast identisch, nur einige kleine Unterschiede, siehe Dokumentation: https://developer.wordpress.org/reference/hooks/script_loader_tag/
apply_filters( 'script_loader_tag', $tag, $handle, $src )
Filtert das HTML-Skript-Tag eines in die Warteschlange gestellten Skripts.
Unten ein Beispiel zum Verschieben eines einzelnen Skripts
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 );
Unten ein Beispiel, um mehr als ein Skript aufzuschieben
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 );
So habe ich sowohl API erklärt style_loader_tag
und script_loader_tag
. Und ich habe einige Beispiele für beide APIs gegeben. Ich hoffe, dass dies für viele Leute da draußen nützlich ist. Ich habe Erfahrung mit beiden APIs.
UPDATE
@CKMacLeod Vielen Dank für Ihr Update, dies verdeutlicht die Dinge. Wir sind meistens auf der gleichen Seite. Wie gesagt, ich bin ein WordPress-Entwickler und wenn Sie ein Thema und / oder Plugin auf https://wordpress.org veröffentlichen möchten, müssen Sie sich im Wesentlichen an die " WordPress Coding Standards " halten, oder sie lehnen Ihre einfach ab Thema und / oder Plugin.
Deshalb ermutige ich Entwickler da draußen, "den WordPress-Weg" zu verwenden. Ich verstehe, dass es manchmal überhaupt keine Unterschiede gibt, aber es ist auch bequem. Wie Sie selbst sagten, können Sie Font Awesome herunterladen und in Ihr Design und / oder Plugin aufnehmen. Auf diese Weise müssen Sie nur die Funktion style_loader_tag entfernen und Ihre Funktion wp_enqueue_style ändern.
Und eine letzte Sache: In der Vergangenheit (vor 5 Jahren) funktionierten einige Plugins zum Zwischenspeichern, Kombinieren und Minimieren nicht. In den meisten Fällen fand ich heraus, warum die Entwickler, die das Thema erstellt hatten, einfach Dinge in den Kopf des Themas und stellten / oder wiederholte sie. Die meisten Caching-Plugins, die (meistens) auch Optionen zum Kombinieren, Minimieren und Verzögern der Ausführung von Skripten bieten, wurden intelligenter und konnten fehlerhaften Code besser erkennen und umgehen. Dies ist jedoch nicht bevorzugt. Deshalb ermutige ich die Leute, unter Berücksichtigung von Standards / Konventionen zu codieren.
Als Entwickler müssen Sie immer berücksichtigen, was die Benutzer mit Ihrem Code tun können, und dabei die Kompatibilität berücksichtigen. Nehmen Sie also nicht die einfache Lösung, sondern die beste optimale Lösung. Ich hoffe, ich habe meinen Standpunkt klargestellt.
EDIT
@CKMacLeod Vielen Dank für die (technische) Debatte. Ich hoffe, dass Sie erkennen, wie wichtig dies ist (mithilfe von WordPress-APIs in Ihrer eigenen Entwicklung). Wieder habe ich mich umgesehen und selbst jetzt, wenn ich mir die FAQs der beliebtesten Minify-Plugins ansehe, sehe ich das normalerweise so oder so, zum Beispiel:
Frage: Warum werden einige der CSS- und JS-Dateien nicht zusammengeführt?
Antwort: Das Plugin verarbeitet nur JS- und CSS-Dateien, die mit der offiziellen WordPress-API-Methode in die Warteschlange gestellt wurden -
https://developer.wordpress.org/themes/basics/including-css-javascript/
-as - sowie Dateien aus derselben Domäne (sofern nicht anders angegeben) auf die Einstellungen).
Siehe FAQ: https://wordpress.org/plugins/fast-velocity-minify/