从子主题覆盖父主题javascript

时间:2014-06-26 12:44:21

标签: javascript php wordpress themes customization

我的父主题在\ includes \ js \ custom.js中有一个脚本,我试图从我的子主题中覆盖它。我可以从我的父主题中看到它使用这段代码排队:(我已经修剪了一些不相关的wp_enqueue_script()调用行。)

function my_deregister_scripts() {
        wp_deregister_script( 'jquery' );
        wp_enqueue_script('jquery', get_template_directory_uri().'/includes/js/jquery.min.js', false, '1.6.4');
        wp_enqueue_script('jquery-custom', get_template_directory_uri().'/includes/js/custom.js', false, '1.0');
        if ( is_singular() && get_option('thread_comments') ) wp_enqueue_script( 'comment-reply' );
}

起初,我以为我可以简单地将一些代码添加到我自己的子function.php中,如下所示:

function custom_script_fix()
{
    wp_dequeue_script( 'jquery-custom' );
    wp_enqueue_script( 'child-jquery-custom', get_stylesheet_directory_uri() .'/includes/js/custom.js', false, '1.0');
}
add_action( 'wp_enqueue_scripts', 'custom_script_fix' );

然后我在编解码器中读到,现在,子函数.php在父函数.php之前运行。这意味着我在父函数.php中出列的东西将会被匆匆排队。这导致我的脚本首先被加载,然后是父脚本:

As you can see, the child script loads, then the parent.

那么,如果不以任何方式修改父主题,我该如何做呢?

1 个答案:

答案 0 :(得分:10)

我明白了:通过简单地将脚本排队并使用在父主题中使用的相同句柄,它优先。因此,当父主题绕过它自己的版本时,句柄已经被分配,并且什么都不做。下面是我使用的代码:

function custom_script_fix()
{
    //use same handle as parent theme to override ('jquery-custom')        
    wp_register_script('jquery-custom', get_stylesheet_directory_uri() .'/includes/js/custom.js', false, '1.0');
    wp_enqueue_script( 'jquery-custom');
}

add_action( 'wp_enqueue_scripts', 'custom_script_fix' );