web-dev-qa-db-fra.com

Retire uniquement les feuilles de style mais pas le style en ligne ajouté à l'aide de wp_add_inline_style

J'ai ces deux lignes ci-dessous sur mon thème parent:

wp_enqueue_style('theme-dynamic-styles', get_template_directory_uri() . '/custom.css');        
wp_add_inline_style('theme-dynamic-styles', $output);

ce css personnalisé, que je veux retirer de la file d'attente sur le thème de l'enfant, mais la feuille de style et le style en ligne utilisent le même nom de descripteur - theme-dynamic-styles, d'où le retrait de la file d'attente. Existe-t-il un moyen de retirer de la file d'attente uniquement la feuille de style mise en file d'attente, mais pas le style en ligne ajouté à l'aide de wp_add_inline_style?

2
Thiyagesh

wp_add_inline_style doit être accompagné d'un style mis en file d'attente existant. Ainsi, au moment où vous supprimez ou annulez l'enregistrement de ce style, le style en ligne associé est également annulé ou désenregistré.

Pour éviter cela, vous devez d'abord récupérer le style en ligne, puis retirer de la file d'attente.

Méthode 1:

Si, après avoir retiré de la file d'attente theme-dynamic-styles, vous ne souhaitez pas en mettre une nouvelle à sa place, vous devrez alors mettre en file d'attente le style en ligne avec la feuille de style par défaut. Par exemple, supposons que votre nom de descripteur de style par défaut soit twentyseventeen-style. Dans ce cas, votre CODE sera comme ceci:

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

Méthode 2:

Si, après avoir retiré de la file d'attente theme-dynamic-styles le descripteur, vous souhaitez en placer un nouveau à la place avec le même nom de descripteur, vous devrez annuler l'enregistrement theme-dynamic-styles; la file d'attente ne suffit pas. Dans ce cas, votre CODE sera comme ceci:

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