如何重写子主题中的JavaScript文件?

时间:2011-08-24 作者:Chris Molitor

我正在父主题中加载一些JavaScript文件。父主题中的路径为:

scripts > custom.js
在儿童主题中,我创建了相同的路径(scripts > custom.js) 以及在custom.js 文件

问题是没有应用更改。在子主题中更改这些文件的方式是否错误?

5 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

子主题仅覆盖包含在get\\u template\\u part或get\\u header等函数中的php文件(如header.php)。

向WordPress添加脚本的正确方法是wp_enqueue_script. 如果父主题使用此选项,则可以使用wp_dequeue_script 让你自己排队。

就像这样。。。

<?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\\u enqueue\\u脚本,那么它可能会挂接到wp\\u head(或wp\\u footer)以在那里呼出脚本。所以你会使用remove_action 要摆脱那些回显脚本的函数,然后将自己的脚本排入队列。

如果脚本是硬编码到模板文件中的,则只需在子主题中替换该模板文件,而不需要使用script标记。

如果他们使用wp\\u enqueue\\u脚本调用get_stylesheet_directory_uri, 那你什么都不用做。既然这没有发生,你只需要四处看看主题作者做了什么。

SO网友:damiankaelgreen

在某些情况下,重要的是对add\\u操作和wp\\u enqueue\\u脚本函数调用进行优先级排序,如下所示:

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\\u enqueue\\u脚本由优先级为20120206(日期)的父级调用,因此此操作添加的优先级略高,因此将立即退出队列。然后,后面的enqueue语句实际上会在之后进行优先级排序,以确保它在旧语句退出队列后加载。在本例中,true也很重要,因为它指定要在页脚中排队,而页脚是父脚本第一次排队的地方。

此外,我不能完全解释它,但我注意到,如果您在初始脚本排队后立即小心地将其退出队列,那么您似乎可以从一开始就有效地阻止它加载。

SO网友:Mohamed Abo Badawy

呼叫wp_deregister_script 在注册自己的版本之前

SO网友:Zabid Ahmed
// 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 );
SO网友:Stefan

自WordPress版本4.7以来,您可以使用“get\\u theme\\u file\\u uri()”,它将首先查找子主题文件夹,然后查找父主题文件夹。这样,子主题中的文件将按优先级排列。

   wp_enqueue_script(\'custom-js\', get_theme_file_uri() . \'/scripts/custom.js\');

结束

相关推荐