web-dev-qa-db-ja.com

Wp_footer()スクリプトをフィルタリングして内容を読み、それらをインラインで挿入することは可能ですか?

フッターに追加されたスクリプトを傍受してwp_footer()wp_head()関数を通過する必要があります。そしてadd_filter('wp_footer', my_function)そしてmy_functionのように、登録されたスクリプトの名前をチェックしてからアクションを実行しますその場合はscript.jsファイルの内容を読んでそれをインラインで挿入するでしょう。

傍受前(これはフッターまたはヘッドに表示されています):

<script type="text/javascript" src="mywp/wp-content/plugins/plugin-name/script.js">

インターセプトの後、私はこのようなインラインスクリプトを見たいと思います:

<script>
    // this is content of plugin script.js or other intercepted scripts...
    var content_is_here = ....
    function() {
        // content inline etc
    ...
    }
</script>

可能ですか?傍受では、私は内容を読んでインラインで挿入するためのスクリプトの名前とパスが必要です。これは私がやり方を知っていますが、私はスクリプトを傍受する方法のアイデアを持っていません...

CSSファイルを傍受することが可能であれば、それも非常に良いでしょう。

前もって感謝します!

2
rafaelfndev

スクリプトの場合、 script_loader_tag フィルタを使用できます。これは、scriptタグが出力される直前に実行されます。これはHTMLの<script>タグをフィルタリングしますが、コンテンツを抽出してscriptタグをスクリプトをインラインに含むバージョンに置き換えるために使用できるハンドルとURLも渡します。

function wpse_292955_inline_script( $script, $handle, $src ) {
    if ( $handle === 'script-handle' ) {
        $script = sprintf( '<script type="text/javascript">%s</script>', file_get_contents( $src ) );
    }

    return $script;
}
add_filter( 'script_loader_tag', 'wpse_292955_inline_script', 10, 3 );

スタイルには style_loader_tag もあります。

function wpse_292955_inline_style( $html, $handle, $href, $media ) {
    if ( $handle === 'style-handle' ) {
        $html = sprintf( 
            '<style type="text/css" media="%s">%s</style>', 
            esc_attr( $media ),
            file_get_contents( $href )
        );
    }

    return $html;
}
add_filter( 'style_loader_tag', 'wpse_292955_inline_style', 10, 4 );

スクリプトとスタイルはURLで登録されるので、file_get_contents()が機能するためにはそのURLがサーバーからアクセス可能である必要があることに注意してください。そのため、おそらくローカルの開発環境では機能しません。

3
Jacob Peattie