限制插件仅在选定页面上加载其CSS和JS?
-
16-10-2019 - |
题
我想使插件限制其对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>
这使我怀疑这个插件正在损害我的网站的加载时间,这是一个仅在网站上的一页上感兴趣的扩展程序。
因此,我的问题是如何从所有页面中删除所有页面中的这些额外行,但“与我联系”页面除外而不停用插件?
解决方案
样式和脚本总是由功能设置 wp_enqueue_script()
和 wp_enqueue_style()
, ,必须与特定的动作钩绑在一起才能发挥作用。我在触点7中窥视了一张表格7,看来它正在使用动作标签 wpcf7_enqueue_scripts
和 wpcf7_enqueue_styles
将它们添加到 wp_print_scripts
和 wp_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');
}
这 is_page() 功能将返回 true
当您在联系页面上时(假设名称为“联系我”)...您还可以将页面slug和页面ID用于过滤器。在所有其他页面上, if()
有条件将脚本/样式删除功能添加到 wp_head
动作,就在 wp_print_scripts
和 wp_print_styles
动作。
这应该从页面中删除额外的代码,并且您不必停用插件或编辑任何核心文件。我上面列出的功能和代码也不会导致您的主题在将来删除Contact 7,也不会导致您的主题突破……因此,无需担心将来的升级兼容性。