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:
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.
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!