Remove wp_add_inline_style

时间:2016-07-08 作者:Toniq

是否有方法删除使用wp\\U add\\U inline\\U style添加的样式?

我注意到,如果我多次调用wp\\u add\\u inline\\u style,它只会不断添加样式,不会覆盖之前添加的样式。

插件正在添加样式:

$inline_css = \'#selector{
    color:red;
}\';
wp_add_inline_style($style, $inline_css);
如果我再次这样做:

$inline_css = \'#other-selector{
    color:blue;
}\';
wp_add_inline_style($style, $inline_css);
它只会附加那些css,我想在再次调用wp\\u add\\u inline\\u样式之前清除css。

2 个回复
SO网友:birgire

删除添加的样式wp_add_inline_style()

如果我们想保持custom-style-css 但仅删除custom-style-inline-css, 然后我们可以试试。

add_action( \'wp_print_styles\', function()
{
    // Remove previous inline style
    wp_styles()->add_data( \'custom-style\', \'after\', \'\' );    

} );
在哪里after 是对应于custom-style 处理程序。

存在的包装器wp_styles()->add_data(), 即wp_style_add_data().

然后我们可以定义helper函数:

function wpse_remove_inline_style( $handler )
{
       wp_style_is( $handler, \'enqueued\' ) 
    && wp_style_add_data( $handler, \'after\', \'\' );
}
并像这样使用它:

add_action( \'wp_print_styles\', function()
{
    // Remove previous inline style
    wpse_remove_inline_style( \'custom-style\' );    

} );
我跳过了function_exists 在这里检查。

要覆盖由另一个插件添加的内联样式,请使用我们自己的:

add_action( \'wp_print_styles\', function()
{
    // Remove previous inline style
    wpse_remove_inline_style( \'custom-style\' );    

    // New inline style
    $custom_css = ".mycolor{
        background: {blue};
    }";
    wp_add_inline_style( \'custom-style\', $custom_css );

} );
请注意,使用替代以前的内联样式不起作用的原因wp_add_inline_style() 是因为WP_Style::add_inline_style() 将每个传入的CSS字符串附加到一个数组中。内部it使用WP_Style::add_data() 存储累积的CSS。这里我们使用它来克服wp_add_inline_style().

SO网友:Ismail

调查wp-includes/class.wp-styles.php 我找到要使用的筛选器的核心文件:

add_action("print_styles_array", function( $styles ) { 
    $my_handle = "custom-style"; // your custom handle here, the one declared as $style in question
    if ( !empty( $styles ) ) {
        foreach ( $styles as $i => $style ) {
            if ( $my_handle === $style ) {
                unset( $styles[$i] );
            }
        }
    }
    return $styles;
});
请注意,这将删除由句柄名称处理的所有内联样式。