子主题替换脚本的wp_dequeue_script

2022-08-30 22:47:29

我有一个子主题,我可以添加我想用来替换一些主题功能和替换一些按钮的脚本。

但是我无法删除旧按钮,因此它们都显示在彼此之上。如何删除父 js 脚本?

这是我为孩子主题function.php

function replace_scroll(){
    // Remove the Default JavaScript    
    wp_dequeue_script( 'dp-js' );

    // Add your own script  
    $js_url = get_bloginfo('stylesheet_directory') . '/js';
    wp_enqueue_script('dp',"$js_url/dp1.scripts.js"); 
} 
add_action( 'wp_enqueue_scripts', 'replace_scroll' ); 

答案 1

这里要开始的几个问题

  • 您应该用于子主题和父主题,而不是函数。后者较慢,使用前两个函数get_stylesheet_directory_uri()get_template_directory_uri()get_bloginfo()

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

  • 优先级很重要。稍后需要挂接函数,以确保在取消注册样式和脚本之前已注册它们,否则它将不起作用。

溶液:

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

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

/*
 * Use any number above 10 for priority as the default is 10 
 * any number after 10 will load after
 */
add_action( 'wp_enqueue_scripts', 'my_custom_scripts', 100 );
function my_custom_scripts()
{
    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() . '/child-script.js' );
    //Now we have done it correctly
}

答案 2

使用父主题 Twenty Fourteen 进行测试,该主题在其文件中包含以下内容:functions.php

function twentyfourteen_scripts() {
    // other enqueues
    wp_enqueue_script( 'twentyfourteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20131209', true );
}
add_action( 'wp_enqueue_scripts', 'twentyfourteen_scripts' );

该操作没有声明的优先级,因此它使用默认的 .为了使取消排队工作,我们必须在子主题文件中添加一个较低的优先级:wp_enqueue_scripts10functions.php

function remove_twentyfourteen_scripts()
{
    wp_dequeue_script( 'twentyfourteen-script' );
}
add_action( 'wp_enqueue_scripts', 'remove_twentyfourteen_scripts', 11 ); // <-- HERE