Vous n’utilisez pas les widgets sur votre site WordPress ? Autant supprimer le support de ceux-ci dans ce cas, ou au moins, supprimer les widgets par défaut.
Une ligne de code suffit pour réaliser cela. Par contre, le hook que l’on doit utiliser ne peut pas être lancé depuis un thème, il faut obligatoirement en passer par un plugin car à l’initialisation du thème, il est déjà trop tard. Il faut donc créer un petit plugin.
Pour cela, il faut créer un fichier php (no-widgets.php par exemple) dans le dossier de vos plugins : wp-content/plugins/ si vous ne l’avez pas déplacé. Optionnellement vous pouvez créer un plugin « Must Use » à la place (il s’agit d’un plugin qui est toujours actif et qui ne peut pas être désactivé). Dans ce cas il faudra placer le plugin dans le dossier wp-content/mu-plugins/ (il faudra créer ce dossier s’il n’existe pas).
Deux choses avant de passer au code.
Quand je dis « Supprimer le support des widgets », ce n’est pas tout à fait exact. Le hook utilisé va empêcher WordPress d’ajouter l’item « Widgets » dans le menu d’administration et va également l’empêcher d’inclure le fichier default-widgets.php. Ce fichier contient les widgets par défaut ainsi que le hook permettant l’initialisation de tout les widgets, mais tout le reste du code inhérent aux widgets est quand même chargé. En gros, cela revient au même que de supprimer le support des widgets puisque l’initialisation ne se fait pas, mais je voulais juste préciser ;)
Deuxième chose : il y a deux hooks possibles pour faire cela, un remove_action
et un add_filter
. J’ai mis les deux dans le code, il ne vous reste qu’à choisir celui que vous préférez à pile-ou-face, c’est exactement pareil :)
Bien, une fois le fichier créé, l’éditer en y mettant ceci :
123456789
<?php
/*
Plugin Name: No WP widgets
Description: Remove default widgets support
*/
remove_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 );
// OU
add_filter('load_default_widgets', '__return_false');
Voilà, c’est fait, adieu les widgets.
Le point positif c’est que comme le code inhérent aux widgets est tout de même chargé, les fonctions register_sidebar()
et autres joyeusetés existent encore, et ne vont donc pas provoquer d’erreur fatale si elles sont présentes dans le thème. Tout ce que vous pourrez noter c’est une alerte si la fonction the_widget() est utilisée, mais seulement en mode debug.
Garder la possibilité d’ajouter des widgets personnalisés
Ce que l’on peut faire aussi, c’est supprimer uniquement les widgets par défaut mais permettre au thème ou à des plugins d’ajouter les leurs.
Pour cela il faudra remettre l’item de menu dans l’administration, et lancer l’initialisation des widgets.
Le code au-dessus est bon, il suffit d’y ajouter ce qui suit.
09101112131415161718192021
/**
Garder la possibilité d'ajouter des widgets personnalisés via le thème ou des plugins
*/
// Remet la page des widgets dans le menu
add_action( '_admin_menu', 'wp_widgets_add_menu' );
// Initialisation des widgets
add_action('init', 'sf_widgets_init', 1);
function sf_widgets_init() {
if ( is_blog_installed() )
do_action('widgets_init');
}
C’est tout :)
Le code complet
010203040506070809101112131415161718192021
<?php
/*
Plugin Name: No WP widgets
Description: Remove default widgets support
*/
remove_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 );
/**
Garder la possibilité d'ajouter des widgets personnalisés via le thème ou des plugins
*/
// Remet la page des widgets dans le menu
add_action( '_admin_menu', 'wp_widgets_add_menu' );
// Initialisation des widgets
add_action('init', 'sf_widgets_init', 1);
function sf_widgets_init() {
if ( is_blog_installed() )
do_action('widgets_init');
}
See ya!
Commentaires
Commentaire de aquelito.
Salut
Sympa l’article !
Tu n’as pas rencontré de problème en supprimant le filtre ‘plugins_loaded’ ?
En construisant un plugin, je suis un peu obligé de me brancher à ce filtre pour récupérer la fonctiion ‘current_user_can’.
A+
Axel
Commentaire de Greg.
Salut aquelito.
Nan, ce n’est pas ce que fait ce code ^^
1
Ceci empêche
wp_maybe_load_widgets
de s’exécuter àplugins_loaded
, ça ne supprime pasplugins_loaded
;)Commentaire de aquelito.
Autant pour moi :)
Commentaire de Julio Potier @ BoiteAWeb.
Bon, 3ème article là, je vais avoir des problèmes ;)
Je vais utiliser ça de suite en utilisant le remove_action() qui est mieux que le add_filter().
Pourquoi ? Je te donne un indice « remove » / « add » ;)
Byoue
Commentaire de jmlapam.
Salut,
Y a pas unregister_widget() qui s’occupe déjà de virer les widget par défaut? Moi c’est ce que j’utilise pour le calendrier par exemple : unregister_widget(‘WP_Widget_Calendar’);
Source : http://wpmu.org/how-to-remove-default-wordpress-widgets-and-clean-up-your-widgets-page/
Commentaire de Julio Potier @ BoiteAWeb.
Donc tu dois te tapper de trouver la déclaration de chaque widget ajouté par un plugin pour pouvoir ensuite les retirer un à un ? Et refaire la manip à chaque install d’un plugin ??
Ha ouè c’est, … comment dire … chiant ?
Commentaire de jmlapam.
Merci de ta précision. J’avais mis un point d’interrogation hein :| … en même temps si tu veux en garder quelques uns tu peux faire ton tri non ?
‘Refaire la manip’ pourquoi ? J’ai pas capté. Ah ouais d’accord ok. Ah non en fait. oO
Commentaire de Greg.
@jmlapam
Comme le dit Julio, c’est effectivement chiant quand on veut les retirer tous, mais ça marche.
Par contre, 2 choses :
– on n’est pas assuré qu’un plugin va pas ajouter son propre widget (dans le cas où on ne veut aucun widget).
– avec ma méthode, le code des widgets par défaut n’est pas chargé (le
include
n’est pas lancé), donc du code en moins toussa.Donc pour moi,
unregister_widget
est approprié dans le cas où on veut virer quelques widgets, pas quand on veut les virer tous.Commentaire de Julio Potier @ BoiteAWeb.
Si tu veux filtrer tu ne veux donc pas supprimer le support des widgets dans WordPress donc tu ne viens pas ici. hahaha
Euh sinon je veux dire « refaire la manip » car si un plugin ajoute son widget, tu dois de nouveau aller chercher dans le cde du plugin quelle widget il s’agit, hacker le fichier functions.php pour aller ajouter ce(s) widget(s). non ?
Commentaire de Greg.
@jmlapam
Par « refaire la manip », Julio veut dire « rechercher le code du widget du nouveau plugin pour le vire » ;)
Commentaire de Julio Potier @ BoiteAWeb.
Un hook pour les trouver, Un hook pour les amener tous, Un hook pour les retirer tous, et dans les ténèbres les lier.
Commentaire de jmlapam.
Ah d’accord. je comprends mieux merci à toi. :D
Alors oui ta méthode est bien meilleure. Que des widgets persos.
Commentaire de Greg.
Mééééheu ! Arrêtez de me marcher dessus XD
Commentaire de Franrusse.
Bonjours,
je sais que la publication date un peu mais je rencontre des petit soucis. J’ai installé la première ligne de code donc sans possibilité de rajouter des widgets perso, mais j’ai quand même un espace vide sur le cote de mon site. Et je voudrai ramener le texte dans cet espace vide, normalement dédier aux widgets. (Je sais pas si j’étais très claire) mais une idée?
Merci!!!
Commentaire de Grégory Viguier.
Bonjour.
Je vois ce que vous voulez dire. Hélas, le fait de supprimer les widgets ne supprime pas la zone où ils étaient affichés sur le site. Pour cela il faut modifier le thème, ce qui signifie modifier les templates et probablement le CSS. La majorité des thèmes prévoient plusieurs templates de pages par exemple, avec ou sans sidebar.