Answers:
子主题仅覆盖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摆脱那些将脚本回显的功能,然后使自己的脚本入队。
如果脚本被硬编码到模板文件中,则只需在不带script标记的子主题中替换该模板文件。
如果他们使用利用get_stylesheet_directory_uri的 wp_enqueue_script调用,则您无需执行任何操作。由于这没有发生,因此您只需要四处转转,看看主题作者做了什么。
wp_enqueue_scripts
只能用于将脚本排入前端。更新。如果您看到过时的内容,请随时进行编辑。
add_action( 'wp_enqueue_scripts', 'wpse26822_script_fix', 100 );
来自codex.wordpress.org/Function_Reference/wp_dequeue_script
wp_deregister_script('parent-script-handle');
来完全删除父脚本。的确,没有它,它对我不起作用。WP 4.6.1
在某些情况下,对add_action和wp_enqueue_script函数调用进行优先排序非常重要,如下所示:
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 20120207);
function wpse26822_script_fix()
{
wp_dequeue_script('storefront-navigation');
wp_enqueue_script('my_storefront-navigation', get_stylesheet_directory_uri().'/js/navigation.min.js', array('jquery'),20151110,true);
}
在这种情况下,父级调用wp_enqueue_scripts的优先级为20120206(日期),因此添加此操作的优先级仅高一点,以便立即将其出队。然后,紧随其后的随后的enqueue语句实际上将被优先排序,以确保在旧的队列出队后加载。在这种情况下,true也是很重要的,因为它指定将其放入页脚中,该页脚是父脚本首先被排队的位置。
另外,我不能完全解释它,但是我注意到,如果您谨慎考虑将初始脚本放入队列后将其出队,那么您似乎可以有效地防止其首先被加载。
wp_enqueue_script
没有优先级参数,只是一个版本号,它作为查询字符串连接到路径的末尾。此参数用于确保无论缓存如何都将正确的版本发送到客户端[...]
在注册您自己的版本之前,请致电wp_deregister_script
// enqueue your required script file
add_action('wp_enqueue_scripts', 'your_child_theme_js_file_override');
function your_child_theme_js_file_override(){
wp_enqueue_script( 'child_theme_script_handle', get_stylesheet_directory_uri() . '/assets/js/your-file.js', array('jquery' ) );
}
// dequeue your required script file
function your_child_theme_js_file_dequeue() {
wp_dequeue_script( 'parent_theme_script_handle' );
}
add_action( 'wp_print_scripts', 'your_child_theme_js_file_dequeue', 100 );