首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用来自子主题的JS文件而不是父主题

使用来自子主题的JS文件而不是父主题
EN

Stack Overflow用户
提问于 2018-09-18 10:22:43
回答 1查看 526关注 0票数 0

我试图从子主题加载init.js,并从父主题卸载该主题。

其结果是,我现在从两个文件中看到页面样式。为什么父文件未被卸载,我如何才能卸载它?

我在/child-theme/function.php中添加了这个

代码语言:javascript
运行
复制
add_action( 'wp_enqueue_scripts', 'wpshout_dequeue_and_then_enqueue', 100 );

function wpshout_dequeue_and_then_enqueue() {
    // Dequeue (remove) parent theme script
    wp_dequeue_script( '/js/init.js' );

    // Enqueue replacement child theme script
    wp_enqueue_script(
        'modified_child_script',
        get_stylesheet_directory_uri() . '/js/init.js',
        array( 'jquery' )
    );
}

这两个文件具有相同的名称,并且都在

代码语言:javascript
运行
复制
parent-theme
-js/init.js

代码语言:javascript
运行
复制
child-theme
-js/init.js
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-18 11:08:55

这里有几个问题要从开始

  • 您应该将get_stylesheet_directory_uri()用于子主题,get_template_directory_uri()用于父主题,而不是使用get_bloginfo()函数。后者速度较慢,并使用前两个函数
  • 脚本和样式应该被取消注册并退出队列,以便将它们完全从队列中删除。
  • 优先权是很重要的。您需要稍后挂起您的函数,以确保样式和脚本在取消注册之前已注册,否则它将无法工作。

解决方案:

将父js文件复制到您的子主题,并打开它并进行必要的更改。保存文件

现在,您需要将父js文件排出队列并取消注册,然后将您的新子主题js文件加入队列。

代码语言:javascript
运行
复制
add_action( 'wp_enqueue_scripts', 'wpshout_dequeue_and_then_enqueue', 100 );

function wpshout_dequeue_and_then_enqueue() {
    wp_dequeue_script( 'parent-script-handle' );
    wp_deregister_script( 'parent-script-handle' );
    // Now the parent script is completely removed

    /*
     * Now enqueue you child js file, no need to register if you are not 
     * doing conditional loading
     */
    wp_enqueue_script( 'child-script-handle', get_stylesheet_directory_uri() . '/js/init.js' );
    //Now we have done it correctly
}

谢谢!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52384395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档