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をクリアしたいです。
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()
があります。
それからヘルパー関数を定義できます。
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()
の 追記 制限を克服するためにそれを使っています。
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;
});
これにより、ハンドル名で処理されたすべてのインラインスタイルが削除されます。