Pourquoi les développeurs détestent-ils WordPress ?

Pourquoi les développeurs détestent-ils WordPress

WordPress a maintenant plus de seize ans. Au cours de ces seize années, il est devenu la technologie la plus utilisée; utilisé par des dizaines de millions de sites internet les plus populaires. Et pourtant, le système le plus populaire pour la publication de sites Web est l’un des systèmes les plus détestés par les développeurs. C’est du moins ce qui ressort de l’enquête menée par Stack Overflow auprès des développeurs, qui a classé WordPress comme la plateforme la plus redoutée par les utilisateurs ces dernières années

WordPress a la réputation, parmi les développeurs, d’être encombrant, lent à charger et peu sûr en terme de sécurité. C’est vrai dans de nombreux cas, mais j’aimerais vous montrer qu’il est possible de créer des sites web, des plugins et des thèmes modernes et faciles à entretenir avec WordPress.

Cet article est divisé en quatre parties :

  • Pourquoi devriez-vous (encore) vous intéresser à WordPress ?
  • Les parties modernes de WordPress
  • Les dernières mises en garde
  • Conclusion

Pourquoi devriez-vous (encore) vous intéresser à WordPress ?

La part de marché de WordPress est une raison évidente de garder un œil sur lui. C’est de loin le CMS le plus utilisé, et ce parce qu’il est facile à mettre en place, relativement rentable et parce qu’il est largement soutenu par les développeurs, les agences et les hébergeurs.

Cette facilité d’utilisation attire beaucoup de personnes pour créer un site. Et bien que ce soit une façon parfaitement valable de mettre un site en place et de le faire fonctionner, ce n’est pas ce que la plupart des développeurs recherchent dans une plateforme.

WordPress est la plus grande plateforme de création de contenu où vous êtes toujours propriétaire de votre propre contenu. Un service comme Medium, par exemple, utilise actuellement le contenu d’autres personnes pour vendre ses abonnements.

Si la propriété du contenu n’est pas importante pour vous, peut-être que l’argent l’est : Les thèmes et plugins WordPress haut de gamme représentent un marché de plusieurs millions voire milliards de dollars. Bien que les produits soient relativement bon marché, ils sont vendus à un grand nombre de clients.

Un gros avantage est que ces clients sont de plus en plus habitués aux modèles d’abonnement. Cela signifie qu’ils se sentent à l’aise pour payer en permanence les mises à jour et le support des plugins et des thèmes qu’ils achètent, ce qui fait des thèmes et des plugins WordPress premium un marché très stable.

WordPress s’est engagé à assurer la rétrocompatibilité ; il ne veut pas casser des millions de sites Web. Si vous êtes novice dans le développement pour WordPress, cela peut être la cause de nombreux problèmes de développement. Cela peut certainement rendre votre première phase de développement beaucoup plus difficile. Mais cette rétrocompatibilité a également un effet positif : après la période de développement initiale, votre projet nécessitera beaucoup moins de mises à jour pour rester compatible. Cela est vrai pour les sites Web, mais aussi pour les plugins et les thèmes. Pour témoigner de cette caractéristique : J’ai personnellement dû mettre à jour un site Web WordPress qui fonctionnait avec la version 2.9, vieille de dix ans à l’époque. Le site a continué à fonctionner sans problème après que j’ai tout mis à jour. C’est assez remarquable dans un monde où une commande npm update va probablement casser mon application ou site internet.

Les parties modernes de WordPress

En 2013, un jeune développeur WordPress du nom de Ryan McCue a commencé à travailler sur une API REST moderne pour WordPress. Bien qu’elle n’ait été ajoutée au noyau de WordPress que bien plus tard, elle s’est avérée être l’étincelle pour une grande partie des écrous et boulons de WordPress.

API REST

L’API REST de WordPress vous permet de faire n’importe quoi avec le contenu, les médias et les paramètres de WordPress d’une manière prévisible et RESTful. C’est une véritable bouffée d’air frais pour tous ceux qui sont habitués aux différentes API basées sur le langage PHP que propose WordPress. Les demandes sont faites aux points de terminaison à l’aide d’une méthode de demande et les résultats sont fournis sous la forme d’objets JSON. L’authentification pour les points de terminaison intégrés se fait automatiquement.

Le Javascript dans WordPress

Cette API REST est surmontée d’une couche de JavaScript moderne. Automattic, la société à l’origine de la version dot-com de WordPress, a commencé à déplacer l’ensemble de l’interface d’administration de sa plateforme vers une application React alimentée par une API REST en 2014. Elle a publié cette application sous la forme d’un projet entièrement open source appelé Calypso.

Bien que le projet soit très populaire et qu’il soit constamment amélioré, il ne sera pas ajouté au noyau de WordPress. Il s’agit d’une application distincte pour la gestion de votre site WordPress. Donc, si vous créez un nouveau site web et que vous recherchez un CMS solide mais avec une interface moderne et extensible, vous pourriez avoir raison de choisir Calypso et WordPress.

Cependant, Calypso n’est qu’une petite partie de la façon dont le JavaScript moderne a trouvé sa place dans WordPress. Le grand projet dans cet espace est actuellement le relativement nouvel éditeur de WordPress surnommé « Gutenberg ».

Gutenberg

Matt Mullenweg, cofondateur de WordPress, a annoncé cet éditeur de contenu entièrement en JavaScript basé sur des composants React lors de sa keynote à la plus grande conférence WordPress d’Europe en 2017. L’échéance de décembre 2017 s’est avérée trop ambitieuse et a finalement été repoussée d’une année complète. La version actuelle de Gutenberg disponible sur WordPress est stable et rapide. Comme tout logiciel, cependant, Gutenberg a sa juste part de problèmes ouverts, il continuera à voir de grandes améliorations au cours des prochaines années.

Il est développé en tant que plugin WordPress et sera intégré au noyau de WordPress de manière progressive. De cette façon, il est beaucoup plus facile pour les équipes de base et de Gutenberg de continuer à itérer. Il est vraiment construit avec l’extensibilité à l’esprit. L’éditeur tourne autour de blocs de contenu que l’utilisateur admin spécifie. L’ajout ou la suppression de blocs pour certains types de contenu est relativement facile, si vous êtes familier avec le JavaScript moderne et React. Voici un exemple d’un bloc Gutenberg personnalisé :

Dans cet exemple, nous utilisons la fonction native de registerBlockType pour créer un bloc « Hello World ». La seule chose que fait ce bloc est de créer une entrée avec la valeur par défaut « Hello World » et de faire écho à la valeur éventuelle de cette entrée dans une
et une .

Passons rapidement en revue ce code :

Il enregistre le bloc avec un certain titre et une certaine description. Il l’ajoute également à une catégorie de bloc.
Il liste tous les attributs du bloc. Dans ce cas, il s’agit d’une chaîne de caractères appelée « hello ».
Il rend un champ dans la fonction edit(), dictant ce qui doit être affiché dans l’administration de WordPress.
Il rend la section dans la fonction save(), indiquant à WordPress comment sauvegarder les données dans ce bloc.
Vous avez peut-être remarqué la référence du composant . C’est un exemple de la façon dont vous pouvez facilement ajouter vos propres composants (React) à Gutenberg pour des fonctionnalités personnalisées et une extensibilité. Vous pourriez toujours décomposer la fonction edit() et save() en composants plus petits s’ils deviennent trop compliqués, par exemple.

Pour apprendre à connaître les nouvelles API et les nouveaux gadgets de Gutenberg, je recommande le cours de développement de Gutenberg par Zac Gordon. J’ai également créé un simple plugin boilerplate pour écrire vos propres blocs Gutenberg, qui peut être trouvé sur Github.

WP CLI

WP CLI est un outil de ligne de commande pour WordPress. Il a été lancé en 2011 par Cristi Burcă et en l’espace d’un an, c’était un projet très populaire dans l’écosystème WordPress. Il vous permet de faire tout ce que l’interface d’administration de WordPress peut faire et plus encore, le tout dans le confort de votre ligne de commande. La meilleure partie de WP CLI est que vous êtes en mesure d’enchaîner les commandes et, par exemple, de mettre à jour tous les plugins en une seule fois, de régénérer tous les fichiers multimédias pour qu’ils fonctionnent avec les nouvelles cultures ou de purger ces réécritures embêtantes. Si vous envisagez de travailler à nouveau avec WordPress, j’inclurais toujours WP CLI dans votre boîte à outils.

Tout comme Gutenberg, WP CLI a été construit avec l’extensibilité à l’esprit. J’inclus certaines commandes WP CLI personnalisées dans la plupart de mes projets aujourd’hui. Ces commandes simplifient le développement ou automatisent certaines tâches, comme la récupération de données à partir d’une API externe.

Voici un exemple d’une classe WP CLI enregistrant deux commandes :

Cet exemple ajoute la commande myplugin à votre liste de commandes WP CLI. Il enregistre deux sous-commandes migrate et fetch_data, qui sont simplement les noms des fonctions de cette classe. Ces deux fonctions reportent proprement leur travail à des classes différentes. Si vous avez des tâches dans l’administration de WordPress qui peuvent être automatisées, ou déclenchées par un simple clic sur un bouton, cela vaut la peine d’écrire une petite commande pour elles, afin de pouvoir les exécuter rapidement depuis le terminal.

Comment contourner tout cet autre héritage ?

Malgré tout le JavaScript moderne et une manière cohérente et facile de gérer vos flux de données, WordPress est toujours un système hérité construit sur une fondation vieille de seize ans. Nous avons besoin d’une aide extérieure pour contourner toute cette technologie vieillissante.

Adopter le PHP moderne

Tout comme WordPress, PHP n’a pas bonne réputation en matière de développement moderne. Il est encore largement connu comme le langage de script bricolé qu’il était il y a dix ans. Heureusement pour nous, PHP a fait de grands progrès au cours des deux dernières années. Depuis la version 5.3, nous disposons d’une pile OOP complète et moderne avec des espaces de noms, des interfaces et des classes abstraites. Et cela n’a fait que s’améliorer avec les différentes versions de PHP 7.

Les exemples utilisés plus tôt dans cet article sont tous configurés avec des espaces de noms et structurés de manière moderne, une chose qui manque encore cruellement dans la plupart des exemples de code dans la documentation de WordPress. Si vous souhaitez changer cela, l’équipe de la documentation de WordPress est toujours à la recherche de personnes talentueuses pour mettre à jour la documentation.

Des choses comme les chargeurs automatiques basés sur les espaces de noms, les tests unitaires php appropriés ainsi que les fausses données deviennent monnaie courante parmi les développeurs PHP.

Gestion des dépendances avec Composer

Un autre ajout important du PHP moderne est l’utilisation de la gestion des dépendances. Composer est un projet open source qui vous permet de charger différentes bibliothèques PHP pour les utiliser dans votre propre projet. La plupart des paquets open source disponibles sont accessibles via Packagist. Les plugins WordPress qui sont disponibles dans le répertoire public des plugins WordPress sont automatiquement disponibles dans Composer via l’excellent service wpackagist. La plupart des autres paquets requis (anciens) peuvent être chargés dans Composer via l’option VCS de Composer.

Il y a toujours un astérisque dans le travail avec Composer dans WordPress, cependant. Cela dépend de l’ampleur de ce que vous essayez de construire, mais un simple plugin devrait traiter les paquets des fournisseurs d’une manière différente de celle d’un projet de site web complet. L’un des projets les plus intéressants dans ce domaine est Mozart de Coen Jacobs, qui tente de faire en sorte que toutes les dépendances d’une installation WordPress soient compatibles entre elles.

De SVN à GIT

Le dépôt de code par défaut de WordPress est SVN. L’ensemble du dépôt de plugins et de thèmes fonctionne sur ce système, tout comme les mises à jour (automatisées) dans l’interface de WordPress. Personnellement, je n’aime pas vraiment SVN. Les outils et l’écosystème qui entourent SVN ne sont tout simplement pas aussi bons que ceux qui entourent Git. Heureusement, il existe de nombreuses solutions pour y remédier. Si vous prévoyez de publier un plugin dans le dépôt de WordPress, mais que vous souhaitez le maintenir en utilisant Github, utilisez les excellentes actions Github pour WordPress de 10up. Si vous n’aimez pas vraiment Github, il existe d’autres excellentes options comme ce script de déploiement Git vers SVN par Gary Jones.

Cette solution de contournement est beaucoup plus rapide que d’attendre que le noyau de WordPress commence à adopter Git, je peux vous l’assurer.

Déploiement de WordPress


Les déploiements dans l’écosystème WordPress dépendent encore du (s)FTP pour une grande partie de la communauté. C’est l’une des raisons pour lesquelles WordPress est connu comme une plateforme amateur. Mais cela ne signifie pas que SFTP est la seule option pour le déploiement. Vous pouvez tout à fait utiliser GIT pour déployer vos sites WordPress, par exemple. Capistrano est une autre option intéressante et il y a aussi beaucoup d’outils bash disponibles qui fonctionnent avec WP CLI.

Il y a un tas d’hébergeurs exclusivement WordPress qui ont également d’excellentes options de déploiement, comme l’option GIT personnalisée de WP Engine, qui exécute également vos tests et vérifie les problèmes de compatibilité avec tout autre code exécuté en dehors de votre dépôt.

La façon dont vous déployez dépend réellement de la façon dont vous gérez les mises à jour au sein de WordPress, alors examinons également cet aspect.

Gérer les mises à jour

La grande question concernant les mises à jour est de savoir si vous êtes d’accord pour que vos utilisateurs mettent eux-mêmes à jour les plugins via l’administration. Donner cette option à vos utilisateurs est une chose intelligente et sûre à faire si vous connaissez et faites confiance au code tiers avec lequel vous travaillez.

Si vous n’êtes pas à l’aise avec l’idée de confier le contrôle de votre pile à des personnes se connectant à l’administration de WordPress, il est possible de leur retirer ce pouvoir. Cependant, l’arrêt total des mises à jour n’est pas une option viable en raison des problèmes de sécurité. Dans ce cas, les mises à jour doivent être effectuées régulièrement par la ligne de commande ou par vos déploiements. Dans tous les cas, je vous recommande de laisser le code tiers (comme les plugins) en dehors de votre dépôt et d’utiliser soit composer et les hooks git, soit une méthode WP CLI pour maintenir votre site à jour. La meilleure solution dépend certainement de ce que vous construisez et du nombre de paquets tiers dont vous avez besoin.

Les dernières mises en garde

Malgré toutes les améliorations apportées à l’écosystème WordPress, il y a encore des domaines qui vous confronteront à l’âge de WordPress et au fait que vous travaillez avec un logiciel ancien. Il n’y a pas vraiment de grandes solutions pour ces problèmes, mais je vais essayer de soulager la douleur autant que possible dans ce chapitre.

Gestion des données et structure de la base de données

WordPress introduit treize tables de base de données à l’installation. Il ne fournit pas de moyen aux développeurs d’en créer de nouvelles et se concentre principalement sur l’ajout d’API pour traiter les tables existantes. WordPress suggère de placer chaque élément d’information supplémentaire concernant les articles, les termes et les utilisateurs dans ce qu’on appelle des méta-tables. Ces tables contiennent un identifiant pour l’objet original, ainsi qu’un champ clé et un champ de valeur. Ce modèle de données est peut-être flexible, mais il est loin d’être optimisé et il sera utilisé de manière abusive dans de nombreux cas.

Il existe d’excellentes options pour créer vos propres modèles de données en plus des modèles existants. Je pense notamment à cette bibliothèque qui intègre Laravel Eloquent à WordPress. Il existe également un plugin bêta qui ajoute des tables de base de données personnalisées à Woocommerce, ce qui améliore considérablement la vitesse, mais à part cela, il n’y a pas beaucoup de solutions prêtes à l’emploi pour le moment.

Il y a beaucoup de choses en développement autour de la gestion des données de Gutenberg qui est assez excitant cependant et vu que Gutenberg va finalement dicter tous les aspects de WordPress, cela conduira inévitablement à de meilleures performances et un modèle de données plus propre. Mais ne retenez pas votre souffle d’ici là.

L’écosystème

On a demandé un jour à l’écrivain de science-fiction Theodore Sturgeon pourquoi 90 % des romans de science-fiction publiés étaient de la merde. Il a répondu : « 90% de tout est de la merde ». Cette idée est communément appelée « la loi de Sturgeon » et elle est très présente lorsqu’il s’agit de thèmes, plugins et autres travaux liés à WordPress.

Cela peut donner à l’ensemble de l’écosystème une impression d’amateurisme et rend la tâche difficile aux personnes qui essaient de trouver de bonnes solutions basées sur WordPress. Il n’y a pas vraiment de réponse à cette question, sauf à demander à d’autres personnes plus familières avec WordPress.

Les slack-channels internationaux et néerlandais de WordPress sont remplis de personnes qui travaillent avec WordPress à un niveau professionnel. Ces canaux sont l’endroit idéal pour poser une ou deux questions sur le plugin le plus adapté à la situation.

Conclusion

Bien que WordPress soit, à bien des égards, un logiciel ancien, il y a beaucoup de choses positives qui se passent dans l’écosystème WordPress. Il pourrait être amusant de faire une croix sur WordPress en raison de son âge, mais sa part de marché ne cesse de croître. Alors pourquoi ne pas examiner un peu plus en détail les éléments modernes de WordPress et réévaluer s’il ne peut vraiment pas faire partie de votre boîte à outils ? Si ce n’est pas le cas, ne vous inquiétez pas : au moins, vous vous serez renseigné sur les nouvelles fonctionnalités de la plateforme et pourrez prendre une décision plus éclairée pour votre prochain projet.