web-dev-qa-db-fra.com

Supprimer wp_add_inline_style

Est-il possible de supprimer les styles ajoutés avec wp_add_inline_style?

J'ai remarqué que si j'appelle plusieurs fois wp_add_inline_style, il ne fait que continuer à ajouter du style, il ne remplace pas ce qui a été ajouté auparavant.

Le plugin ajoute des styles:

$inline_css = '#selector{
    color:red;
}';
wp_add_inline_style($style, $inline_css);

Si je le fais encore:

$inline_css = '#other-selector{
    color:blue;
}';
wp_add_inline_style($style, $inline_css);

Il va juste ajouter ces css, je voudrais effacer les css avant d'appeler à nouveau wp_add_inline_style.

3
Toniq

Supprimer les styles ajoutés avec wp_add_inline_style()

Si nous voulons conserver le custom-style-css mais ne supprimer que le custom-style-inline-css, alors nous pouvons essayer, par exemple.

add_action( 'wp_print_styles', function()
{
    // Remove previous inline style
    wp_styles()->add_data( 'custom-style', 'after', '' );    

} );

after est la clé de données pour le style en ligne correspondant au gestionnaire custom-style.

Il existe un wrapper pour wp_styles()->add_data(), à savoir wp_style_add_data() .

Nous pourrions alors définir la fonction d'assistance:

function wpse_remove_inline_style( $handler )
{
       wp_style_is( $handler, 'enqueued' ) 
    && wp_style_add_data( 'custom-style', 'after', '' );
}

et l'utiliser comme:

add_action( 'wp_print_styles', function()
{
    // Remove previous inline style
    wpse_remove_inline_style( 'custom-style' );    

} );

Je saute la vérification function_exists ici.

Pour remplacer le style en ligne, ajouté par un autre plugin, avec notre propre:

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

} );

Remarque

La raison pour laquelle le remplacement du style en ligne précédent par wp_add_inline_style() ne fonctionne pas, c'est parce que WP_Style::add_inline_style() ajoute chaque chaîne CSS entrante dans un tableau. En interne, il utilise WP_Style::add_data() pour stocker le fichier CSS accumulé. Ici, nous l’utilisons pour surmonter la restriction ajout de wp_add_inline_style().

4
birgire

En regardant dans le fichier de base wp-includes/class.wp-styles.php, j'ai trouvé un filtre à utiliser:

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

Notez que cela supprimera tous les styles en ligne traités par le nom du descripteur.

1
Samuel Elh