问题描述
我正在父主题中加载一些 JavaScript 文件。父主题中的路径是:
scripts > custom.js
在子主题中,我创建了相同的路径 (scripts > custom.js
),并更改了 custom.js
文件中的一些 jQuery 。
问题是这些更改没有被应用。这是在孩子主题中更改这些文件的错误方法吗?
最佳解决方案
儿童主题只会覆盖包含在 get_template_part 或 get_header 等函数中的 php 文件 (如 header.php) 。
将脚本添加到 WordPress 的正确方法是使用 wp_enqueue_script 。如果您的父主题使用此方法,您可以使用 wp_dequeue_script 并排队自己来覆盖 JS 文件。
像这样…
<?php
// hook in late to make sure the parent theme's registration
// has fired so you can undo it. Otherwise the parent will simply
// enqueue its script anyway.
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 100);
function wpse26822_script_fix()
{
wp_dequeue_script('parent_theme_script_handle');
wp_enqueue_script('child_theme_script_handle', get_stylesheet_directory_uri().'/scripts/yourjs.js', array('jquery'));
}
如果父主题没有使用 wp_enqueue_script,那么它可能是挂在 wp_head(或 wp_footer) 中来回显出那里的脚本。所以你可以使用 remove_action 来摆脱那些回应脚本的函数,然后排列你自己的脚本。
如果脚本被硬编码到模板文件中,那么您只需要在没有脚本标签的子主题中替换该模板文件。
如果他们使用了使用 get_stylesheet_directory_uri 的 wp_enqueue_script 调用,那么你不应该做任何事情。既然没有发生这种情况,那么你只需要戳一下,看看主题作者做了什么。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。