web-dev-qa-db-ja.com

Wp_add_inline_styleを使用して追加されたインラインスタイルではなく、スタイルシートのみをデキューする

私は私の親テーマの下にこの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を使用して追加されたインラインスタイルではなく、エンキューされたスタイルシートのみをデキューする方法はありますか?

2
Thiyagesh

wp_add_inline_style には、既存のエンキュースタイルを含める必要があります。そのため、そのスタイルをデキューまたは登録解除した瞬間に、関連付けられているインラインスタイルもデキューまたは登録解除されます。

それを回避するには、最初にインラインスタイルを取得してからデキューする必要があります。

方法1:

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

方法2:

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 );
3
Fayaz