wake-up-neo.com

Ist es möglich, die Skripte von wp_footer () zu filtern, den Inhalt zu lesen und inline einzufügen?

Ich muss die Skripte, die in der Fußzeile und im Kopf hinzugefügt werden, über die Funktionen wp_footer() und wp_head() abfangen, etwa add_filter('wp_footer', my_function), und dann würde ich in my_function den Namen des registrierten Skripts überprüfen und dann eine Aktion ausführen case würde den Inhalt der script.js-Datei lesen und in die Zeile einfügen, etwa so:

Vor dem Abfangen (dies wird in Fußzeile oder Kopf angezeigt):

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

Nach dem Abfangen möchte ich das folgende Inline-Skript anzeigen:

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

Ist das möglich? Beim Abfangen benötige ich den Namen des Skripts und den Pfad, um den Inhalt zu lesen und Inline einzufügen. Ich weiß, wie es geht, aber ich habe keine Ahnung, wie ich Skripts abfangen soll.

Wenn es möglich ist, auch CSS-Dateien abzufangen, wäre das sehr gut!

Danke im Voraus!

1
rafaelfndev

Für Skripte können Sie den Filter script_loader_tag verwenden, der unmittelbar vor der Ausgabe des Skript-Tags ausgeführt wird. Es filtert das HTML-Tag <script>, übergibt aber auch das Handle und die URL, mit denen Sie den Inhalt extrahieren und das Skript-Tag durch eine Version ersetzen können, in der das Skript eingebunden ist:

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 );

Es gibt auch style_loader_tag für Stile:

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 );

Beachten Sie, dass Ihr Server auf die URL zugreifen muss, damit file_get_contents() funktioniert, da Skripts und Stile mit einer URL registriert sind. In einer lokalen Entwicklungsumgebung funktioniert dies wahrscheinlich nicht.

2
Jacob Peattie