web-dev-qa-db-fra.com

Comment retirer / désenregistrer tous les styles et scripts de thème

Est-il possible pour certains de faire en sorte que mon plugin supprime/désenregistre tous les styles et scripts de ce thème jamais activé. donc peu importe le thème qui sera installé, les styles et scripts de ce thème seront retirés/désenregistrés?

Juste pour être super clair:

  1. Je ne sais pas quel thème sera utilisé.
  2. J'ai besoin de retirer/désenregistrer uniquement les styles et les scripts du thème et non des autres plugins.
1
user315338

La chose délicate est de savoir si un script ou un style particulier a été mis en file d'attente par le thème.

Les thèmes et les plugins utilisent tous les deux les mêmes crochets et fonctions, ils ne sont donc pas explicitement étiquetés comme appartenant à un thème ou un plugin spécifique. Cela signifie que la seule façon de savoir si un script ou un style provient du thème est de vérifier l'URL pour voir si l'URL du script/style pointe quelque part dans le répertoire du thème.

Vous pouvez le faire en boucle sur $wp_scripts->registered Et $wp_styles->registered, Et vérifier l'URL de chaque script et style par rapport à get_theme_root_uri() qui vous indique l'URL du dossier des thèmes . Si le script/style semble se trouver dans ce dossier, vous pouvez le retirer de la file d'attente:

function wpse_340767_dequeue_theme_assets() {
    $wp_scripts = wp_scripts();
    $wp_styles  = wp_styles();
    $themes_uri = get_theme_root_uri();

    foreach ( $wp_scripts->registered as $wp_script ) {
        if ( strpos( $wp_script->src, $themes_uri ) !== false ) {
            wp_deregister_script( $wp_script->handle );
        }
    }

    foreach ( $wp_styles->registered as $wp_style ) {
        if ( strpos( $wp_style->src, $themes_uri ) !== false ) {
            wp_deregister_style( $wp_style->handle );
        }
    }
}
add_action( 'wp_enqueue_scripts', 'wpse_340767_dequeue_theme_assets', 999 );

Cela ne fonctionnera que si la feuille de style ou le script est à l'intérieur du thème. Si le thème met en file d'attente des scripts ou des styles à partir d'un CDN, je ne sais pas s'il est possible de les cibler.

1
Jacob Peattie

Peut-être que cela vous aidera. essayer

#For dequeue JavaScripts
function remove_unnecessary_scripts() {
    # pass Name of the enqueued js.
    # dequeue js
    wp_dequeue_script( 'toaster-js' );
     # deregister js
    wp_deregister_script( 'toaster-js' );
}
add_action( 'wp_print_scripts', 'remove_unnecessary_scripts' );

#For dequeue Styles 
function remove_unnecessary_styles() {
    # pass Name of the enqueued stylesheet.
    # dequeue style
    wp_dequeue_style( 'custom-style' );
    # deregister style
    wp_deregister_style( 'custom-style' );
}
add_action( 'wp_print_styles', 'remove_unnecessary_styles' );

Pour supprimer uniquement les styles et scripts de thèmes, vous pouvez essayer ci-dessous:

function remove_all_scripts_from_theme() {
    global $wp_scripts;
    # remove all js
    // $wp_scripts->queue = array();
    foreach( $wp_scripts->queue as $handle ) {

        if (strpos($wp_scripts->registered[$handle]->src, '/themes/') !== false) {
            # dequeue js
              wp_dequeue_script( $handle );
                # deregister js
               wp_deregister_script( $handle);
            }
        }

}
add_action('wp_print_scripts', 'remove_all_scripts_from_theme', 100);

function remove_all_styles_from_theme() {
    global $wp_styles;
     # remove all css
   // $wp_styles->queue = array();

    foreach( $wp_styles->queue as $handle ) {

        if (strpos($wp_styles->registered[$handle]->src, '/themes/') !== false) {
            # dequeue js
              wp_dequeue_style( $handle );
                # deregister js
               wp_deregister_style( $handle);
            }
        }

}
add_action('wp_print_styles', 'remove_all_styles_from_theme', 100);

faites-moi savoir si cela fonctionne ou non. j'ai testé ce code. ça marche comme des charmes :-)

Je vous remercie!

0
Chetan Vaghela