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

时间:2018-09-18 10:22:43

标签: wordpress

我正在尝试从子主题中加载init.js,并从父主题中卸载该主题。

结果是,现在我可以看到两个文件的页面样式。为什么不卸载父文件以及我如何完全卸载它?

我已在/child-theme/function.php中添加了此

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' )
    );
}

两个文件都具有相同的名称并且位于

parent-theme
-js/init.js

child-theme
-js/init.js

1 个答案:

答案 0 :(得分:1)

这里有一些开始的问题

  • 您应该将get_stylesheet_directory_uri()用于子主题,并将get_template_directory_uri()用于父主题,而不要使用get_bloginfo()函数。后期比较慢,并且使用前两个功能

  • 脚本和样式应该取消注册并出队,以将其从队列中完全删除

  • 优先级很重要。您需要稍后挂接函数,以确保在注销样式和脚本之前已注册样式和脚本,否则它将无法正常工作。

解决方案:

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

现在,您需要出队并注销父js文件,然后将新的子主题js文件入队

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
}

谢谢!