是否将插件限制为仅在选定页面上加载其CSS和JS?

时间:2010-08-22 作者:Tal Galili

我想让一个插件将CSS样式表和JavaScript JS文件的加载限制为只加载需要的页面。

我的问题的一个例子是插件Contact Form 7 我用它在我的网站上的一个页面上创建了一个表单contact me“页面)。但是,它会在网站上的每个页面/帖子中添加以下行:

<link rel=\'stylesheet\' id=\'contact-form-7-css\'  href=\'http://www.r-statistics.com/wp-content/plugins/contact-form-7/styles.css?ver=2.3.1\' type=\'text/css\' media=\'all\' /> 

<script type=\'text/javascript\' src=\'http://www.r-statistics.com/wp-content/plugins/contact-form-7/scripts.js?ver=2.3.1\'></script> 
这让我怀疑这个插件正在影响我的网站的加载时间,因为我只对网站上的一个页面感兴趣。

Thus, my question is how can I remove these extra lines from all the pages except for the "Contact Me" page but without deactivating the plugin?

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

样式和脚本始终由函数设置wp_enqueue_script()wp_enqueue_style(), 它们必须绑在特定的动作钩上才能发挥作用。我偷看了一下联系人表单7,它似乎使用了wpcf7_enqueue_scriptswpcf7_enqueue_styles 将它们添加到wp_print_scriptswp_print_styles 挂钩。

因此,您需要做的是从每个页面中取消挂接脚本和样式,但要从您的联系人页面中取消挂接。这个wp_head 动作在脚本和样式动作之前触发,所以你需要在主题的函数中添加类似的内容。php文件:

function remove_wpcf7_extras() {
    remove_action(\'wp_print_scripts\', \'wpcf7_enqueue_scripts\');
    remove_action(\'wp_print_styles\', \'wpcf7_enqueue_styles\');
}

if( ! is_page(\'contact me\') ) {
    add_action(\'wp_head\', \'remove_wpcf7_extras\');
}
Theis_page() 函数将返回true 当你在联系页面(假设名字是“联系我”)。。。您还可以将页面slug和页面ID用于过滤器。在所有其他页面上if() conditional将脚本/样式删除功能添加到wp_head 动作,在wp_print_scriptswp_print_styles 行动。

这将从页面中删除额外的代码,您不必停用插件或编辑任何核心文件。如果您以后删除联系人表单7,我上面列出的函数和代码也不会导致您的主题中断。。。因此,无需担心将来的升级兼容性。

结束

相关推荐

如何版本化主css文件?

如何指示wordpress使用“样式”以外的文件名。css“用于我的主样式表-例如,styles-1。css?我想这样做是为了版本控制和缓存。