web-dev-qa-db-ja.com

Wp_add_inline_styleを削除します。

Wp_add_inline_styleで追加されたスタイルを削除する方法はありますか?

Wp_add_inline_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_add_inline_styleを呼び出す前にcssをクリアしたいです。

3
Toniq

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', '' );    

} );

aftercustom-styleハンドラに対応するインラインスタイルのデータキーです。

wp_styles()->add_data()のラッパー、すなわち wp_style_add_data() があります。

それからヘルパー関数を定義できます。

function wpse_remove_inline_style( $handler )
{
       wp_style_is( $handler, 'enqueued' ) 
    && wp_style_add_data( 'custom-style', '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文字列を配列に追加するからです。内部的には蓄積されたCSSを保存するためにWP_Style::add_data()を使います。ここではwp_add_inline_style() 追記 制限を克服するためにそれを使っています。

4
birgire

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;
});

これにより、ハンドル名で処理されたすべてのインラインスタイルが削除されます。

1
Samuel Elh