问题描述

我的父主题 (Starkers) 添加了一个我想要删除的 CSS 文件 (我想使用 @import,所以我可以更容易地覆盖样式) 。 Starkers 在其 functions.php 中具有以下内容:

add_action( 'wp_enqueue_scripts', 'script_enqueuer' );

function script_enqueuer() {
    wp_register_script( 'site', get_template_directory_uri().'/js/site.js', array( 'jquery' ) );
    wp_enqueue_script( 'site' );

    wp_register_style( 'screen', get_template_directory_uri().'/style.css', '', '', 'screen' );
    wp_enqueue_style( 'screen' );
}

我在小孩的 functions.php 中尝试过以下内容,但链接和脚本标签仍然显示在头部。

add_action('init', 'removeScripts');
function removeScripts() {
    wp_dequeue_style('screen');
    wp_deregister_script('site');
}

我已经仔细检查,看看他们是否是在父标题中硬编码,而不是它们。

最佳解决方案

I want to use @import instead so I can override styles more easily

只是。别。做。那。

你只需跳入同一个钩子,然后注销/排除样式/脚本,并抛出您的自定义。

function PREFIX_remove_scripts() {
    wp_dequeue_style( 'screen' );
    wp_deregister_style( 'screen' );

    wp_dequeue_script( 'site' );
    wp_deregister_script( 'site' );

    // Now register your styles and scripts here
}
add_action( 'wp_enqueue_scripts', 'PREFIX_remove_scripts', 20 );

dequeue-ing 和注销脚本的原因很简单:

Note that if you’d like to be able to use either of those handles ('screen' or 'site') after dequeuing them, you’ll need to deregister them too. For instance: wp_deregister_style( 'screen' ); and wp_deregister_script( 'site' );peterjmag

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。