style_loader_tag
style_loader_tagは公式のWordPress APIです。ドキュメントを参照してください:https ://developer.wordpress.org/reference/hooks/style_loader_tag/
apply_filters( 'style_loader_tag', $html, $handle, $href, $media )
エンキューされたスタイルのHTMLリンクタグをフィルタリングします。
最初にスタイルシートをエンキューします。ドキュメントを参照してください: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 );
$handle
である'font-awesome-5'
私はnull
バージョン番号がありませんように。この方法でキャッシュされます。
単純なstr_replace
単純なstr_replaceは、必要なことを達成するのに十分です。以下の例を参照してください
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 );
異なる属性
を追加する例の下に、(複数の)異なるスタイルシートに異なる属性を追加します。
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 );
すべてのスタイルに属性を追加する
以下の例では、同じ属性を複数のスタイルシートに追加しています。
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
これも便利なので、script_loader_tagについても説明しますが、このAPIはwp_enqueue_scriptと組み合わせて機能します。
script_loader_tag APIはほとんど同じですが、わずかな違いがあります。ドキュメントを参照してください:https ://developer.wordpress.org/reference/hooks/script_loader_tag/
apply_filters( 'script_loader_tag', $tag, $handle, $src )
エンキューされたスクリプトのHTMLスクリプトタグをフィルタリングします。
単一のスクリプトを延期する例の下
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 );
複数のスクリプトを延期する例の下
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 );
したがって、APIとの両方について説明style_loader_tag
しましたscript_loader_tag
。両方のAPIの例をいくつか示しましたが、これが多くの人々に役立つことを願っています。私は両方のAPIの経験があります。
更新
@CKMacLeod 更新していただきありがとうございます。これにより状況が明確になります。私たちはほとんど同じページにいます。私が言ったように、私はWordPress開発者であり、テーマやプラグインをhttps://wordpress.orgで公開したい場合は、基本的に「WordPressコーディング標準」に従う必要があります。テーマおよび/またはプラグイン。
だからこそ、私は「WordPressの方法」を使うよう開発者に勧めています。違いがないこともありますが、それも便利です。Font Awesomeをダウンロードしてテーマやプラグインに含めることができるとおっしゃっていたように、この方法では、style_loader_tag関数を削除してwp_enqueue_style関数を変更するだけで済みます。
最後に、過去(5年前)に、プラグインのキャッシュ、結合、および縮小化が機能しなかったため、ほとんどの場合、テーマを作成した開発者が単純にテーマの頭に物を入れ、 /またはそれらをエコーしました。(ほとんどの場合)スクリプトの実行を結合、最小化、遅延するオプションも提供するほとんどのキャッシュプラグインは、不正なコードの検出とその回避において、より賢く、より優れたものになりました。しかし、これは好ましくありません。だからこそ、私は標準/規約を念頭に置いてコーディングすることを人々に奨励しています。
開発者として、あなたは常に人々があなたのコードで何ができるかを考慮し、互換性を考慮に入れる必要があります。したがって、簡単な解決策ではなく、最適な最適な解決策を取ります。私の視点を明確にしたと思います。
@CKMacLeodの編集(技術的な)議論に感謝します。これがどれほど重要であるかを理解していただければ幸いです(独自の開発でWordPress APIを使用)。繰り返しますが、私は周りを見回しており、今でも、最も人気のあるminifyプラグインのFAQを見ると、通常これはどちらか一方の方法で見られます。たとえば、
質問:一部のCSSファイルとJSファイルがマージされないのはなぜですか?
回答:プラグインは、公式のWordPress APIメソッド(https://developer.wordpress.org/themes/basics/include-css-javascript/)を使用してエンキューされたJSファイルとCSSファイル、および
同じドメインのファイルのみを処理し
ます(指定されている場合を除く)設定で)。
FAQを参照してください:https : //wordpress.org/plugins/fast-velocity-minify/