Une agence maintient une extension d’affichage d’avis clients, distribuée à environ deux cents sites construits avec des dizaines de thèmes différents, dont une bonne moitié encore sur des bases classiques héritées de 2016 ou 2017, sans le moindre bloc Gutenberg dans leurs zones de widgets. La question posée en réunion d’équipe est simple : faut-il encore, en 2020, écrire un nouveau widget avec register_widget(), ou est-ce du temps perdu sur une API qu’on annonce mourante depuis l’arrivée de l’éditeur de blocs ?
La réponse ne tient pas à une mode technique, mais au parc réel que l’extension doit servir. Et pour une extension multi-thèmes destinée à durer, ignorer les widgets classiques revient à couper l’accès à une bonne partie de sa base installée.
Ce que Gutenberg a changé, et ce qu’il n’a pas changé
Depuis WordPress 5.0, l’éditeur de blocs a remplacé l’éditeur de contenu classique, et un widget de type bloc peut désormais être inséré dans un article ou une page comme n’importe quel autre bloc. Mais les zones de widgets de la barre latérale ou du pied de page, elles, continuent d’utiliser l’écran widgets.php classique, avec son système de glisser-déposer hérité. Rien dans le cœur de WordPress, à la date de cet article, ne transforme automatiquement ces zones en zones à blocs : ce chantier existe dans les discussions de la feuille de route de Gutenberg, mais aucune version publiée ne l’implémente encore.
Concrètement, un thème classique appelle toujours dynamic_sidebar() dans son fichier sidebar.php, et cette fonction continue de fonctionner exactement comme avant, en listant les widgets enregistrés via register_widget() et en les rendant dans l’ordre choisi par l’administrateur du site.
Le cas où le widget classique reste justifié

Pour une extension qui vise un public de thèmes variés, souvent installés depuis des années sur des sites de PME ou d’associations, register_widget reste le seul mécanisme garanti de fonctionner partout, sans supposer que le thème a été mis à jour ou reconstruit avec les blocs en tête. Voici un squelette minimal, conforme à l’API :