禁用某些页面由heme.json添加的自定义内部CSS

时间:2021-08-09 作者:iSaumya

我知道WordPress v5.8刚刚发布,我已经开始使用theme.json 管理古腾堡方面的一些基本事务。但当我开始使用它时,我看到了一些事情:

WordPress在编译后添加的自定义内部CSStheme.json 文件到每个页面。有人知道如何停止在某些页面上添加它吗?例如,如果我有一个自定义主页或没有使用Gutenberg的归档页面,那么WordPress加载这个内部CSS是没有意义的。我想知道是否有人想出任何过滤器来有条件地禁用某些页面的内部CSS输出。

下面是它的外观:theme.json internal CSS added by WordPress

P、 S:我已经检查了关于theme.json 文档,但它们对我的查询没有多大帮助。以下是我已经检查过的链接:

2 个回复
最合适的回答,由SO网友:birgire 整理而成

我们可以调查wp_enqueue_global_styles() 函数,调用wp_should_load_separate_core_block_assets() 并查看其包含,例如should_load_separate_core_block_assets filter 但是我们不能在前端禁用全局样式filter 因为:

/*
 * Global styles should be printed in the head when loading all styles combined.
 * The footer should only be used to print global styles for classic themes with separate core assets enabled.
 *
 * See https://core.trac.wordpress.org/ticket/53494.
 */
if ( ( ! $separate_assets && doing_action( \'wp_footer\' ) ) || ( $separate_assets && doing_action( \'wp_enqueue_scripts\' ) ) ) {
    return;
}
它挂在两个位置,页眉或页脚:

// Global styles can be enqueued in both the header and the footer. 
// See https://core.trac.wordpress.org/ticket/53494.
add_action( \'wp_enqueue_scripts\', \'wp_enqueue_global_styles\' );
add_action( \'wp_footer\', \'wp_enqueue_global_styles\', 1 );
So罚单53494 也很有用notes.

对于使用单独块样式加载的完整站点编辑主题onoff 还有经典主题off, 您可以通过以下方式将其从存档中删除:

add_action( \'wp_enqueue_scripts\', function () { 
    is_archive () && wp_dequeue_style ( \'global-styles\' );
}, 11 );
因为它已排队wp_enqueue_scripts 使用优先级10挂钩。

对于带有独立块样式加载的经典主题on:

add_action( \'wp_footer\', function () { 
    is_archive () && wp_dequeue_style ( \'global-styles\' );
}, 2 );
因为它已排队wp_footer 挂接优先级1。

但我们注意到主题、模式和其他插件可能依赖于此。

SO网友:iSaumya

在深入研究WordPress v5.8代码库之后,我终于找到了一种方法,它似乎是禁用显示这些代码的唯一方法theme.json 基于特定页面上生成的内部CSS,请执行以下操作:

add_action( \'wp_enqueue_scripts\', function() : void {
    // Dequeue the styles added by theme.json file
    wp_dequeue_style(\'global-styles\');
});
因此,如果要向其添加某些逻辑,也可以这样做,例如:

add_action( \'wp_enqueue_scripts\', function() : void {
    if( is_front_page() ) {
        // Dequeue the styles added by theme.json file
        wp_dequeue_style(\'global-styles\');
    }
});
希望这对其他人有帮助。

注意:上面的PHP代码是为PHP v8编写的,因此如果您使用的是较低版本的PHP,则可以删除返回类型声明,即。: void 函数开头的第一个括号之前。

相关推荐

About wordpress child themes

我对WordPress和儿童主题有一些问题。据我所知,如果我不想在更新主题时失去任何东西,使用子主题是很重要的。我是WordPress的初学者,到目前为止,我一直在使用PageBuilder(管理面板上的板载自定义选项)自定义我的网站,并在“附加CSS”选项中加入几行CSS。所有这些都是在主主题上完成的(只是玩转尝试学习),现在我想开始使用一个儿童主题。问题如下:我不知道我是否可以像通过管理界面设计父主题那样设计我的子主题,或者我是否必须通过文本编辑器(在我的计算机上,然后通过FTP等方式上传)对所有内容