私は私の親テーマの下にこの2行を持っています:
wp_enqueue_style('theme-dynamic-styles', get_template_directory_uri() . '/custom.css');
wp_add_inline_style('theme-dynamic-styles', $output);
このカスタムCSSは、子テーマでデキューしたいのですが、スタイルシートとインラインスタイルの両方で同じハンドル名 - theme-dynamic-styles
を使用しているため、両方ともデキューされました。 wp_add_inline_style
を使用して追加されたインラインスタイルではなく、エンキューされたスタイルシートのみをデキューする方法はありますか?
wp_add_inline_style
には、既存のエンキュースタイルを含める必要があります。そのため、そのスタイルをデキューまたは登録解除した瞬間に、関連付けられているインラインスタイルもデキューまたは登録解除されます。
それを回避するには、最初にインラインスタイルを取得してからデキューする必要があります。
theme-dynamic-styles
ハンドルをデキューした後で、代わりに新しいものをエンキューしたくない場合は、デフォルトのスタイルシートを使用してインラインスタイルをエンキューする必要があります。たとえば、デフォルトのスタイルハンドル名がtwentyseventeen-style
であるとします。その場合、あなたのCODEは次のようになります。
function wpse262235_dequeue_style() {
$handle = 'theme-dynamic-styles';
// get the inline style (returns as array)
$inline_styles = wp_styles()->get_data( $handle, 'after' );
wp_dequeue_style( $handle );
if( ! empty( $inline_styles ) ) {
wp_add_inline_style( 'twentyseventeen-style', implode( "\n", $inline_styles ) );
}
}
// make sure the priority is higher than the hook that enqueued the style
add_action( 'wp_enqueue_scripts', 'wpse262235_dequeue_style', 20 );
theme-dynamic-styles
ハンドルをデキューした後で、同じハンドル名を使用して新しいものをその場所にエンキューしたい場合は、theme-dynamic-styles
を登録解除する必要があります。デキューするだけでは不十分です。この場合、あなたのコードは次のようになります。
function wpse262235_dequeue_style() {
$handle = 'theme-dynamic-styles';
$inline_styles = wp_styles()->get_data( $handle, 'after' );
wp_deregister_style( $handle );
// a new style from child theme with the same handle
wp_enqueue_style( $handle, get_stylesheet_directory_uri() . '/custom.css' );
if( ! empty( $inline_styles ) ) {
wp_add_inline_style( $handle, implode( "\n", $inline_styles ) );
}
}
add_action( 'wp_enqueue_scripts', 'wpse262235_dequeue_style', 20 );