从wp_head中删除所有主题css(&J)(但仅适用于1个页面模板)

时间:2016-11-17 作者:Heinrich Held

我有一个页面模板,它工作得很好。但当我包含时,它会加载主题CSS和js文件,这会破坏我的页面模板。

然而,我仍然需要wp\\u头才能让一些插件工作。

有没有办法阻止wp\\u head加载任何我的主题的CSS&;js文件?

我希望页面模板只使用自己的CSS+js。

4 个回复
SO网友:Heinrich Held

谢谢你的帮助!此解决方案适用于我的主题:

function remove_all_theme_styles() {
if ( is_page_template(\'template-landing.php\') ) {
    global $wp_styles;
    $wp_styles->queue = array();
}
}
add_action(\'wp_print_styles\', \'remove_all_theme_styles\', 100);

SO网友:Ahmer Wpcoder110

我修改了Heinrich Hold answer,这样可以帮助那些希望删除、取消和取消注册主题样式和脚本的新用户。以下函数将删除所有注册的样式。


function remove_all_theme_styles() {
        if ( is_page_template(\'trading-dashboard.php\') ) {
            global $wp_styles,$wp_scripts;
            foreach( $wp_styles->queue as $style ) :
               $handle = $wp_styles->registered[$style]->handle;
               wp_deregister_style($handle);
               wp_dequeue_style($handle);
            endforeach;    
            foreach( $wp_scripts->queue as $script ) :
                $handle = $wp_scripts->registered[$script]->handle;
                wp_dequeue_script($handle);
                wp_deregister_script($handle);
            endforeach;
        }
    }
add_action( \'wp_enqueue_scripts\', \'remove_all_theme_styles\', 100 );
但假设您不想删除自定义样式或脚本,然后执行以下操作


function remove_all_theme_styles() {
        if ( is_page_template(\'trading-dashboard.php\') ) {
            global $wp_styles,$wp_scripts;
            foreach( $wp_styles->queue as $style ) :
               if ($wp_styles->registered[$style]->handle != \'my-custom-style\') {
                    $handle = $wp_styles->registered[$style]->handle;
                    wp_deregister_style($handle);
                    wp_dequeue_style($handle);
               }
            endforeach;
            foreach( $wp_scripts->queue as $script ) :
                if ($wp_scripts->registered[$script]->handle != \'my-custom-script\') {
                    $handle = $wp_scripts->registered[$script]->handle;
                    wp_dequeue_script($handle);
                    wp_deregister_script($handle);
                }
            endforeach;
        }
    }
add_action( \'wp_enqueue_scripts\', \'remove_all_theme_styles\', 100 );
希望这能帮助别人!

SO网友:Rarst

没有明确的方法可以可靠地做到这一点(sans-hacky方法,如缓冲页面输出)。

假设所有东西都只使用适当的WP API来排队,那么您可以对所有资源进行解队列。更严厉的方法是脱钩wp_print_styles(), wp_print_scripts(), 和wp_print_footer_scrtipts().

简而言之,要彻底、干净地做到这一点,没有简单的方法。您要么做一些极端的事情,比如完全删除头/脚挂钩,要么必须逐个脚本对其进行微观管理。

SO网友:Megan Rose

这取决于主题是使用排队脚本/样式,还是在标题中硬编码。

如果CSS;JS已排队,您可以在指定的模板中将其出列:

function wpse_246547_deregister() {
    if ( is_page_template(\'YOUR-TEMPLATE.php\') ) {
        wp_dequeue_script( \'name-of-script\' );
        wp_deregister_script( \'name-of-script\' );
        wp_dequeue_style( \'name-of-stylesheet\' );
        wp_deregister_style( \'name-of-stylesheet\' );
    }
}
add_action( \'wp_enqueue_scripts\', \'wpse_246547_deregister\', 100 );
https://codex.wordpress.org/Function_Reference/wp_dequeue_scripthttps://codex.wordpress.org/Function_Reference/wp_dequeue_style

如果CSS;JS引用在标头中硬编码。php文件,您可以在模板中指定使用不同的头文件(在本例中,它将查找header-alt.php):

get_header( \'alt\' );

https://codex.wordpress.org/Function_Reference/get_header#Multiple_Headers

相关推荐

从wp-head中删除rel=‘dns-prefetch’href=‘//maps.google.com’

如何将其从WP头中移除:<link rel=\'dns-prefetch\' href=\'//maps.google.com\'> 我也有这个:<link rel=\'dns-prefetch\' href=\'//s.w.org\'> 但是,我在函数中用这个代码删除了它。phpadd_filter( \'emoji_svg_url\', \'__return_false\' ); 这可能是由一个插件添加的exifografy, 它可以显示拍摄图像