Wordpress est en quelque sorte MVC. Il s'agit plutôt d'un modèle MVC de type pull, où la vue "tire" des données du modèle. Il le fait d'une manière très procédurale, au lieu d'utiliser beaucoup d'objets différents, mais cela rend en fait les modèles frontaux plus faciles à écrire à bien des égards.
Cela confère également aux vues un certain degré de logique de contrôle (d'où l'appellation MVC).
Faisons le tour de la question : Wordpress reçoit une URL. Le noyau de Wordpress agit comme un contrôleur et détermine les requêtes initiales à exécuter dans la base de données et, par extension, la vue à charger (vue par catégorie, vue par article ou page unique, etc.) Il regroupe ensuite la réponse à cette requête INTIALE et l'envoie au fichier de vue.
Ce fichier d'affichage peut être un fichier d'affichage uniquement OU il peut demander des informations/questions supplémentaires en plus de celles qui sont intégrées. C'est le type "pull" du MVC, où la vue tire des données du modèle au lieu que le contrôleur "pousse" les données du modèle vers la vue.
Ainsi, lorsque la vue voit du code pour charger une barre latérale ou une zone de widgets, elle demande cette information. Cependant, les widgets qui devraient s'y trouver sont déterminés par le contrôleur, qui consulte le modèle pour savoir quels widgets se trouvent dans la barre latérale, puis sélectionne ceux qui sont définis pour s'afficher sur la page actuelle et les renvoie à la vue.
Le fait que chaque partie de ce système ne soit pas un objet n'enlève rien à l'approche MVC. Vous pouvez modifier le noyau de WP sans (nécessairement) modifier quoi que ce soit sur un thème. De même, tant que vous utilisez des fonctions intégrées comme 'get_pages()', le modèle et les tables de la base de données peuvent changer tant que ces fonctions renvoient les bonnes données. Ainsi, le modèle est indépendant de la vue, et le contrôleur est également indépendant (sauf lorsque la vue ajoute une logique de contrôleur pour faire plus que ce que le noyau fait normalement).
Bien qu'il soit possible d'avoir un objet modèle contenant un certain nombre de méthodes et d'éléments comme WPModel::get_pages('blah blah'), et de tout contenir de cette manière, il existe toujours une séparation fondamentale des préoccupations.
Vue : fichiers de modèles Contrôleur : Noyau de WP Modèle : les différentes fonctions qui gèrent la manipulation de données spécifiques.
Tant que les noms, les arguments, etc., restent les mêmes (ou que de nouveaux sont ajoutés), la séparation des préoccupations est maintenue et l'un d'entre eux peut être modifié sans perturber les autres.
Il ne s'agit pas d'une version ultra-propre de MVC (surtout lorsque des crochets sont utilisés), mais c'est le point de départ d'un niveau de base.
Et être procédurier à ce sujet n'est pas une mauvaise chose. Une requête provenant d'un site web est assez intrinsèquement procédurale : c'est un processus avec un début et une fin clairs, et qui nécessite juste une procédure pour traiter la requête, obtenir des données, les empaqueter, puis mourir. Vous pouvez mettre en place ces étapes avec des objets, des méthodes d'objets et des modèles de POO (ce qui rendrait certaines choses plus faciles) ou vous pouvez simplement écrire beaucoup d'appels de fonctions et les séparer de cette façon. Les membres de la classe comme les variables privées sont perdus de cette façon, mais selon les besoins de l'application... vous pouvez ne pas vous en soucier.
Il n'existe pas de méthode unique de développement, et WP est présent sur environ 20 % des sites web, ce qui signifie qu'il fait quelque chose de bien. Probablement quelque chose à voir avec le fait de ne pas obliger les gens à apprendre/mémoriser des hiérarchies de classes complexes pour que la base de données réponde à la question "quelles sont les pages enfants de la page x ?" et traite ces données. Pourriez-vous le faire aussi facilement avec la POO ? oui, mais si Joomla est un exemple de la difficulté de mettre en œuvre un site web personnalisé complexe avec la POO, alors WP est beaucoup plus facile et rapide, et le temps c'est de l'argent.