是否可以过滤wp_footer()脚本、读取内容并将其内联插入?

时间:2018-02-02 作者:rafaelfndev

我需要截取添加在页脚中的脚本,并通过wp_footer()wp_head() 函数之类的add_filter(\'wp_footer\', my_function) 然后进来my_function, 我会检查name of the registered script 然后执行一个操作,在这种情况下,将读取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文件也将是非常好的!

提前感谢!

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

对于脚本,可以使用script_loader_tag 过滤器,在输出脚本标记之前运行。它过滤HTML<script> 标记,但它还传递句柄和URL,您可以使用该句柄和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注册的,因此您的服务器需要能够访问URLfile_get_contents() 工作,所以它可能在本地开发环境中不起作用。

结束

相关推荐

如何在不使用::BEFORE或::AFTER的情况下向所有帖子超链接追加和添加内容?PHP钩子解决方案?

我的网站上有使用前后伪元素来设置样式的链接。我想在所有链接前加括号。像这样:这是帖子中段落的一个例子。它看起来是这样的,但当涉及到超链接时,它看起来是这样的[ this ]. 你知道我是如何在链接前后加上括号的吗?我想这样做,但我不能使用before-after元素,因为它们已经被用于其他用途了。当然,在函数中有一种方法可以做到这一点。php之类的对吗?我知道高级自定义字段有一种方法可以附加您创建的任何自定义字段,所以看起来应该没那么难。