Contenu principal

Supprimer le support des widgets dans WordPress

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!