WordPress, je t’aime moi non plus !
Ce qui manque à WordPress !
Voici un article qui pourrait bien créer la polémique. Même si c’est ce n’est évidemment pas le but !
Bien au contraire !
Mais, qui aime bien, châtie bien…
WordPress est un excellent CMS, même, s’il lui manque un certain nombre de choses pour être LE CMS !
En tant que développeur WordPress nous pestons tous un jour ou l’autre sur le fait que WordPress fait preuve d’un certain nombre de manques ou d’approximations.
Même si la communauté de développeurs de WordPress est sans aucun doute la plus vivante et la plus importante des CMS actuellement en vigueur, même si WordPress continue d’évoluer dans le bon sens, il est encore possible de l’améliorer grandement.
Et plutôt que de faire quelques replâtrages… il nous semble qu’il serait plus bénéfique de le revoir en profondeur…
Voici donc quelques pistes de réflexions pour faire de WordPress le CMS incontournable, certes, mais surtout un CMS abouti à un point jamais égalé …
Toutes les idées évoquées ici ne sont pas à prendre au pied de la lettre. Principalement, notre objectif est de créer le débat, la discussion, et d’apporter modestement notre pierre à l’édifice.
Modèle de données
Ce n’est un secret pour personne, un modèle de données optimisé est un plus pour toute application. Dans le cas de WordPress, certaines bizarreries persistent. Donnons donc un bon coup de balai pour nettoyer, et surtout améliorer ce modèle.
Les objectifs sont d’une part d’améliorer les performances et d’autres part d’étendre les capacités fonctionnelles de WordPress.
Dans un premier temps, nous pouvons remarquer que WordPress utilise une table pour gérer les articles et les pages, une autre pour gérer les liens, mais que les catégories et les mots-clés utilisent le même jeu de table (wp_terms and co) … Pourquoi ? Il serait préférable de gérer les différentes notions (catégories, mots clés, etc.) dans des tables séparées, et donc de créer une table pour les catégories.
Une table spécifique aux catégories : wp_categories
- category_id
- category_name
- category_slug
- category_description
- category_image (url de l’image affectée à la catégorie)
- category_parent_id
De ce fait il conviendra de modifier la table wp_posts en y ajoutant la colonne category_id. Au passage, on peut imaginer également que les pages pourront de ce fait être associées à des catégories sans devoir passer par un plugin WordPress.
[03 / 12 /2010] En fait, cela ne marcherait pas, car un article peut être associé à plusieurs catégories. Il faudra donc prévoir une table décrivant les relations entre les articles (et les pages) et les catégories, ou… réutiliser la table wp_relationships
[27/02/2012] Autre possibilité, tout simplement stocker les catégories dans la table wp_posts avec comme post_type ‘category’
Ajouter des tables dédiées aux menus : wp_menus et wp_menu_elements
Table wp_menus
- menu_id
- menu_name
- menu_slug
- menu_decription
Table wp_menus_elements
- menu_id
- menu_element_id
- menu_element_type (post, page, category, link, url)
- menu_element_id (sauf si url)
- menu_element_parent_id
- menu_element_order
- menu_element_title
- menu_element_description
- menu_element_slug
Par ailleurs, dans le cas où WordPress est utilisé comme un véritable CMS (et c’est aujourd’hui bien plus qu’une tendance), il devient nécessaire de pouvoir créer des tables spécifiques (par exemples : acteurs, films) et de gérer ces tables depuis le back-office de WordPress. Pour gérer (ce qui entre autre, signifie créer, modifier, supprimer…) ces tables, il faudrait des tables telles que wp_tables, wp_table_columns, wp_table_relationships :
Une table décrivant des tables personnalisées : wp_tables
- table_id
- table_name
- table_description
Une table décrivant les colonnes des tables personnalisées : wp_table_columns
- table_id
- column_id
- column_name
- column_description
- column_format
- column_length
- column_key_type (primary key or not)
- column__increment (true or false)
L’un des gros points faibles de WordPress concerne la gestion des sites multilingues. Pour améliorer cet état de fait, il conviendrait de disposer d’une table gérant les langues (wp_languages) et de d’une table, wp_translations, contenant les traductions des différents éléments (posts, pages, terms, categories, links, etc.)
Une table définissant les langues du site : wp_languages
- language_id
- language_code
- language_name
Une table wp_translations, contenant les traductions :
- language_id
- item_type (post, category, link, menu, term, etc.)
- item_id (post_id, category_id, term_id, menu_element_id …)
- translation (texte de la traduction)
=> Prévoir dans les options générales le comportement de WordPress quand un contenu n’existe pas dans toutes les langues : afficher le contenu par défaut, ou n’afficher que le contenu existant dans la langue de l’internaute
Modifier la table wp_posts pour ajouter l’url de la vignette de l’article ou de la page
Administration
Gestion de la blog roll :
Donner la possibilité à l’utilisateur de sélectionner une image comme il peut le faire dans un article ou une page, et augmenter la taille de la description. Ajouter la possibilité de traduire le titre et la description des liens.
Gestion des liens internes
Dans un article ou une page, ajouter une fonctionnalité permettant de lier une sélection à une autre page, un autre article, une catégorie, un mot-clé ou un lien de la blogroll (cf. plugin link-to-post)
Gestion des catégories :
Ajouter la possibilité de sélectionner et d’affecter une image à une catégorie
Ajouter l’éditeur wysiwyg pour décrire la catégorie (en lieu et place d’un simple texte)
Divers
- Donner la possibilité à l’utilisateur de réorganiser l’ordre des menus
- Dans chaque menu, trier les options par ordre alphabétique
- Ajouter des raccourcis clavier dans les menus
- Donner la possibilité « enregistrer sous » pour les articles, les pages, les catégories, les liens, etc.
- Créer une fonction permettant aux intégrateurs, installateurs, développeurs, etc. de « dupliquer »/ »cloner » une installation de WordPress (options, thèmes, plugins).
- Gestion des newsletters en standard, sans extension…
- Intégration Facebook et Twitter, et autres, en standard.
- Intégrer un véritable système de cache en standard (cf. wp super cache ; w3t, etc.)
- Générer automatiquement le fichier sitemap.xml (avec, pour les gros sites Internet comportant plusieurs dizaines ou centaines de milliers de pages, un index des sitemaps) et donner aux développeurs une fonction permettant de générer ce fichier à la demande.
- Faire évoluer la fonction d’importation : permette au développeur de préciser / décrire un format d’importation à partir d’un fichier CSV
- Intégrer une fonction de pagination similaire au plugin wp-navi ou autre
- Ajouter l’intégration de Google Analytics en standard
- Intégrer une gestion de workflow pour le contenu
- Améliorer la gestion des utilisateurs (ajout de champs tels que adresse, date de naissance, téléphone, etc.)
- Revoir la procédure d’installation : une installation facile (comme actuelle) et une installation personnalisée, dans laquelle l’administrateur peut paramétrer les fonctionnalités, notamment celles évoquées dans ce chapitre. Prévoir éventuellement plusieurs profils types d’installation : blog, CMS, CRM, réseau communautaire, e-commerce, full (toutes fonctionnalités activées)… Voire, donner la possibilité de combiner plusieurs profils (ex. CMS + Blog + réseau communautaire).
- Ajouter en standard l’équivalent de lightbox pour les images, les vidéos, et tout contenu multi-media, ainsi que pour les formulaires
- Améliorer l’éditeur wysiwyg, par exemple en intégrant automatiquement les styles du thème courant.
- Intégrer en standard un système anti-spam pour les formulaires
- Intégrer un système de statistiques tel que statpress
- Ajouter phpMyAdmin ou un équivalent dans le back-office de WordPress
- Améliorer la recherche d’articles, de pages, de catégories dans le back-office de WordPress en permettat notamment de rechercher dans les champs personnalisés (par exemple, on définit un type de pages personnalisé, annonces, contenant notamment un champ « référence »…. il serait souhaitable de pouvoir rechercher sur ce champ « référence »
- De la même manière, permettre à l’administrateur de sélectionner les champs personnalisés à afficher dans le back-office de WordPress pour la gestion des articles et des pages. Permettre le tri sur ces champs personnalisés.
Formulaires
- Intégrer une interface utilisateur permettant de créer facilement des formulaires (cf. contact 7 form)
- Les données saisies dans les formulaires devront pouvoir être enregistrées dans la base de données (il faudra donc un outil de reporting) et être envoyé sur un email, eventuellement spécifique à chaque formulaire.
- Chaque formulaire devra pouvoir être multilingue.
SEO
Pour chaque article, page, catégorie, mot-clé, donner la possibilité de définir les meta balises (title, description, keywords).
De la même manière, donner la possibilité de définir la balise title utilisée pour les liens (cf. All in One SEO Pack)
Générer automatiquement le fichier sitemap.xml
Articles, pages, etc.
- Ajouter, en standard, la gestion de la vignette, et incorporer dans la table wp_posts l’url de la vignette.
- Donner la possibilité d’affecter une page à une ou plusieurs catégories.
- Donner la possibilité de modifier l’url AVANT la sauvegarde de la page ou de l’article
- Interdire la sauvegarde si le titre n’est pas renseigné
- Inclure automatiquement les styles du thème dans le menu idoine de l’éditeur Wysiwyg (cela peut éventuellement être une option dans WordPress)
- SEO : ajouter la saisie des meta balises, avec les limitations d’usage (titre : maximum 60 caractères, description : maximum 160 caractères)
Options / réglages
- Ajouter la possibilité de choisir d’activer / désactiver les sauvegardes automatiques des articles et des pages
- Ajouter la possibilité (en fonction de la question précédente) d’indiquer la fréquence de sauvegarde
- Ajouter la possibilité de définir la sauvegarde, l’optimisation et la réparation de la base de données (cf. wp-db-manager)
Thèmes
Ajouter une fonction permettant de définir simplement des options pour un thème. L’idée est de faciliter le travail du développeur ou de l’intégrateur pour qu’ils puissent se concentrer sur l’essentiel et surtout pour qu’ils puissent développer plus vite.
Intégrer une fonction permettant de traduire le thème (cf Po Edit plugin). De ce fait, modifier la manière dont WordPress gère actuellement les traductions (__e ou _e) … en permettant d’utiliser des instructions de type %name%, %toto% où name et toto sont des chaînes définies dans les fichiers de traductions
Actuellement le développeur doit préciser dans le fichier functions.php les menus, les barres latérales (sidebars). Pourquoi ne pas donner la possibilité de créer les menus et les barres latérales dans les options du thème, charge au développeur de les utiliser ensuite correctement dans le thème… Par exemple, création d’un menu my_menu (ID=1), et de deux sidebars, sidebar-1 (ID=1) et sidebar-2 (ID=2)… Le développeur peut ensuite utiliser directement dans le thème les éléments qu’il aura créer dans le back-office de WP…
=> On peut d’ailleurs envisager l’ajout d’une table wp_menus et d’une table wp_sidebars. NE pas oublier, particulièrement pour les menus, la gestion des langues
Moteur de recherche
- Donner la possibilité au développeur de créer un formulaire de recherche multi-critères (ex. choisir une ville, un type de bien immobilier, un nombre de pièces, un budget minimal, un budget maximal)
- Donner la possibilité de relier les tables et champs personnalisés à ce moteur de recherche
Conclusion
Nous venons de voir qu’il est grandement possible et surtout souhaitable de faire évoluer ce qui est à l’heure actuelle l’un des meilleurs CMS du monde. Malgré ses grandes qualités, WordPress, s’il veut s’imposer comme le CMS incontournable, se doit dévoluer en profondeur. C’est tout le but de cet article, et nous aimerions créer le débat, et nous vous encourageons à nous faire part de vos remarques et de vos commentaires.
nov 28, 2010 @ 16:33:46
Salut ! Article intéressant, mais as-tu regardé la dernière bêta de WordPress...
L'utilisation de WordPress est légère, simple et efficace. Il est léger et s'installe en deux minutes (vraiment) S'ils devaient rajouter des options, qui sont pour la plupart superflus, cela ne ferait que l'alourdir pour rien.
Les extensions sont faites pour ça
nov 28, 2010 @ 16:58:33
Je m'attendais à voir une grosse critique du système de templates, du code un peu cradingue, du manque de cohérence dans les noms/types d'évènement, ...
Bah ok, WP reste une bonne solution. Mais pour moi la seule chose qui en fait un bon CMS c'est sa réputation.
nov 28, 2010 @ 16:24:59
Article très intéressant.
Mais le fait de vouloir faire évoluer autant WordPress ne risque t-il pas de le rendre moins facile d'accès et plus inaccessible aux néophytes ?
Sinon, personnellement en tant que développeur, je suis entièrement d'accord avec toutes les idées citées.
nov 28, 2010 @ 17:56:11
Article intéressant.
Je suis d'accord sur pas mal de points mais beaucoup concernent la transformation de wordpress en CMS. On sait qu'il est plutôt orienté blog et il est très bon pour ça...
Pour les tables, j'ajouterai que je ne comprend toujours pas pourquoi les médias (notamment les images) sont stockées dans la table des post ?!?
nov 28, 2010 @ 18:38:08
@Substitute59 : C'est justement le but notamment de la possibilité de proposer plusieurs profils d'installation, et ainsi d'avoir aussi bien, pour le néophyte une installation simple (comme actuellement) que pour le développeur d'avoir accès à un panel d'options plus fourni...
nov 28, 2010 @ 18:43:06
@Valentin : C'est vrai Valentin, mais, aujourd'hui WordPress se positionne de plus en plus comme un CMS (voir ma réponse précédente sur le fait que WordPress puisse rester simple). Pour le reste, je pense que certaines fonctionnalités devraient de ce fait faire partie intégrante de WordPress pour en parfaire le côté CMS, sans que cela d'ailleurs alourdisse ou complexifie son utilisation. Quand à la version 3.1, je la teste en ce moment, mais elle ne me donne pas satisfaction par rapport à l'ensemble des fonctionnalités nécessaires pour faire un CMS, et qui plus est un CMS performant.... notamment du point du vue du modèle de données...
nov 28, 2010 @ 18:48:46
@1p2v : Aujourd'hui WordPress est de plus en plus utilisé comme un CMS... et c'est la raison d'être de cet article...
Par contre, effectivement, une table dédiée aux médias, wp_medias, par exemple, serait la bienvenue
nov 28, 2010 @ 18:46:12
@Immobilier : Le système des templates par rapport à bien d'autres CMS (Joomla, Drupal, EzPublish and Co) est justement l'un des points forts de WordPress, même si, évidemment, il reste possible de l'améliorer. Pour ce qui est du code... disons qu'il n'est pas le meilleur, mais il n'est pas non plus le pire ... loin de là ...
Il manque effectivement une vraie gestion d'événements, et aussi, pendant que j'y pense, la possibilité, à l'instar de WP DB Manager, par exemple, de paramétrer simplement des tâches planifiées...
A titre d'exemple de ce qu'il est possible de faire comme CMS avec WordPress : www.av-immo.com ou encore www.estimation-immobiliere.fr (site sous WP avec plus de 300 000 pages et plusieurs milliers d'utilisateurs) , avec notamment un moteur de recherche réellement multi-critères...
nov 29, 2010 @ 19:47:35
Merci Camikat
et tout à fait d'accord pour ce qui est du chemin accompli par WordPress sur la difficile route des CMS
nov 29, 2010 @ 19:42:48
Très bon article, pour qui veut approfondir ces connaissances en php, Worpress est idéal, à la fois ludique et passionnant et tellement facile à mettre à jour pour des clients toujours à la recherche de simplicité.. Joomla est bien aussi, tout est en ligne mais c'est l'usine à gaz coté client !
WordPress a fait un tel chemin depuis quelques tps, qu'il peut faire rivaliser sans complexe avec les autre CMS, il suffit d'aller faire un tour du coté des réalisations qui parlent d'elles mêmes...
http://welovewp.com/
Merci et bonne continuation
nov 30, 2010 @ 15:44:32
Rajouter Fcb, Twitter, etc... c'est plus à l'admin de l'ajouter via des extensions mais améliorer la rapidité (cache, etc...) et ajouter les newsletter oui !
nov 30, 2010 @ 15:22:54
imposssible de retrouver mes articles windows life les plus anciens !WP n'a édité que les derniers !
L’Hebdo WordPress : Francis Chouquet – WordPress 3.1 – VaultPress
nov 30, 2010 @ 16:24:48
[...] disons toujours du bien de WordPress (parce qu’il le vaut bien) mais une analyse qui semble objective, proposant des remèdes aux problèmes identifiés est toujours intéressante à [...]
nov 30, 2010 @ 17:21:15
@abcmoteur, Toute extension est par définition un facteur de ralentissement du système... et aujourd'hui, les passerelles vers Twitter et Facebook sont des must-have ! dès lors, pourquoi s'en priver en standard ?
nov 30, 2010 @ 17:22:06
@tuloup anne : passez à la dernière version de WLW qui n'est plus limité quand au nombre d'articles pouvant être récupérés...
nov 30, 2010 @ 19:36:31
@ l'hebdo WordPress : merci de m'avoir cité et de votre appréciation
déc 04, 2010 @ 16:28:52
wp_tables, wp_table_columns ?
houlà ! et le catalog il sert à quoi ?
http://dev.mysql.com/doc/refman/5.0/en/information-schema.html
déc 06, 2010 @ 14:18:57
@mailpress : oui, c'est exact, sauf que... cela ne marchera pas forcément sur tous les serveurs mutualisés... Mais, effectivement, si WP peut fournir nativement l'accès (ou des fonctions de "gestion") à la DB "mère" (information-schema), c'est bien mieux ....
L’Hebdo WordPress : Francis Chouquet – WordPress 3.1 – VaultPress | Serbouti Mohamed Amine
déc 13, 2010 @ 12:11:20
[...] disons toujours du bien de WordPress (parce qu’il le vaut bien) mais une analyse qui semble objective, proposant des remèdes aux problèmes identifiés est toujours intéressante à [...]