问题描述

我想导致一个插件将 CSS 样式表和 JavaScript JS 文件的加载限制到只需要它们的那些页面。

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

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

这使我怀疑这个插件会损害我的网站的加载时间,只有在网站上只有一页的感兴趣的扩展。

因此,我的问题是如何从除了”Contact Me” 页面之外的所有页面中删除这些额外的行,但不停用插件?

最佳解决方案

样式和脚本始终由函数 wp_enqueue_script()wp_enqueue_style()设置,wp_enqueue_style()wp_enqueue_style()必须绑定到特定的动作钩子才能运行。我在联络表格 7 中看到,它看起来像是使用 wpcf7_enqueue_scriptswpcf7_enqueue_styles 的动作标签将它们添加到 wp_print_scriptswp_print_styles 钩子。

所以,你需要做的是 un-hook 每个页面的脚本和样式,但你的联系页面。 wp_head 操作在脚本和样式操作之前触发,因此您需要在主题的 functions.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');
}

当您在联系页面上时,is_page()函数将返回 true(假设名称为”contact me”)… 您还可以使用页面段和页面 ID 作为过滤器。在所有其他页面上,if()条件将脚本/样式删除功能添加到 wp_head 操作之前,该操作将在 wp_print_scriptswp_print_styles 操作之前触发。

这应该从您的页面删除额外的代码,您将不必停用 plug-in 或编辑任何核心文件。上面列出的功能和代码也不会导致您的主题中断,如果您以后删除联系表 7,… 所以没有必要担心未来的升级兼容性。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。