it-swarm.cn

限制插件只加载选定页面上的CSS和JS?

我想使插件将CSS样式表和JavaScript JS文件的加载限制为仅需要它们的那些页面。

我的问题的一个示例是插件 联系表单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> 

这让我怀疑这个插件会影响我网站的加载时间,这个扩展程序只对网站上的一个页面感兴趣。

因此,我的问题是如何从除“联系我”页面之外的所有页面中删除这些额外的行,但是没有停用插件?

9
Tal Galili

样式和脚本总是由函数wp_enqueue_script()wp_enqueue_style()设置,它们必须绑定到特定的动作钩子才能运行。我在Contact Form 7中看了一眼,看起来它正在使用wpcf7_enqueue_scriptswpcf7_enqueue_styles的动作标签将它们添加到wp_print_scriptswp_print_styles钩子中。

因此,您需要做的是从每个页面取消挂钩脚本和样式但是您的联系页面。 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 ...您还可以使用页面slug和页面ID作为过滤器。在所有其他页面上,if()条件将脚本/样式删除函数添加到wp_head操作,该操作在wp_print_scriptswp_print_styles操作之前触发。

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

9
EAMann