我正在尝试从子主题中加载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
答案 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
}
谢谢!