Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Peut-on travailler proprement avec Wordpress ?

Peut-on travailler proprement avec Wordpress ?

Wordpress est un outil formidable très utilisé dans le monde. Cette popularité doit certainement beaucoup à la simplicité de son installation. Mais peut-on l’intégrer dans un flux de production moderne ? Versioning, déploiement automatisé, machine virtuelle, tests… Ce 27ème CaenCamp sera l’occasion de partager les expériences et de débattre sur la pertinence de choisir Wordpress comme outil de travail.

Pierre-Emmanuel Fringant

June 04, 2015
Tweet

More Decks by Pierre-Emmanuel Fringant

Other Decks in Programming

Transcript

  1. Pourquoi Wordpress ? • Facilité d’installation • Documentation • Plugins

    • Thèmes • Mises à jour de sécurité automatiques • Interface d’admin
  2. Interface d’admin de Wordpress • Ergonomie • Sauvegarde automatique, historique

    • Prévisualisation • Gestion des médias • Gestion des utilisateurs • Gestion des droits
  3. “Travailler proprement” • Machine virtuelle • Versioning • Hébergement de

    qualité (ssh) • Déploiement automatisé • Suite de tests
  4. Pourquoi proprement ? • Travail à plusieurs • Maintenance •

    Automatisation = risque d’erreur réduit • Satisfaction personnelle
  5. Pourquoi c’est dur de travailler proprement avec Wordpress ? •

    Philosophie • Communauté • Dette technique du projet • Architecture du code • Architecture des plugins
  6. Thèmes, plugins • Installer et versionner un par un •

    Identifier la configuration à reporter sur chaque environnement • Attention, il est possible de perdre des données • Installer avec Composer ? http://wpackagist.org/
  7. Config des thèmes et plugins • Pas de solution miracle,

    il faut gérer au cas par cas • Identifier tous les paramètres de config • Les mettre sous une forme versionable
  8. • Readme • Migration en SQL • Générer le diff

    de dump SQL • Convention dans les commits • Pas pratique en équipe Config des thèmes et plugins
  9. Contenu et présentation • Post, page : ne pas utiliser

    le champ riche “contenu” pour mettre du code de présentation • Voire l’enlever remove_post_type_support(‘post’, ‘editor’); • Normaliser les types de contenu et les champs • Les templates du thème gèrent la présentation
  10. Custom Post Type • Comme un modèle de MVC, ou

    une table dans la base de données (ex : recette, ingrédient) • Directement administrable dans l’admin • Template dédié dans le thème • Facile à créer avec le générateur en ligne GenerateWP
  11. GenerateWP http://generatewp.com/ • Custom Post Type • Taxonomy • Menu

    • Sidebar • Shortcode • … • Exporter en PHP dans des plugins séparés
  12. Custom Field • Comme les champs d’une table • Facile

    à créer avec le plugin ACF • Exporter en PHP dans le plugin de son Custom Type
  13. Advanced Custom Fields http://www.advancedcustomfields.com/pro/ • Tout type de champ •

    Groupe de champs répétables • Relations entre types • Export PHP • Licence à partir de 25 $ australiens Alternative gratuite : Custom Field Suite (export JSON uniquement)
  14. Développements spécifiques • Fichier functions.php : facile mais non, ne

    doit servir qu’au thème • Créer des plugins spécifiques au projet • Créer un thème enfant avec des templates pour les pages plus complexes
  15. Architecture • wp-content ◦ plugins ▪ plugins vendors ▪ plugins

    spécifiques au projet ◦ themes ▪ theme parent ▪ theme enfant
  16. Résultat • Un framework dans lequel toute l’admin est déjà

    faite • Les développeurs retrouvent leurs habitudes • L’intégration est facilitée : ◦ Pas de présentation dans les données ◦ Templates spécifiques à chaque type ◦ Champs bien définis
  17. À surveiller http://versionpress.net/ • Permet de versionner les fichiers et

    la base • Synchronisation des environnements • Encore en développement
  18. Thèmes, plugins gratuits • Qualité du code • Tests unitaires

    • Documentation • Avis des utilisateurs • Nombre de contributeurs • Date des derniers commits • Traitement des issues • Communauté • Sécurité
  19. Plugin • Advanced Custom Fields • WP Cli • WP

    Migrate Db (Pro) • WP Migrate Db Cli Addon • WP REST API Thème • Underscores Quelques incontournables
  20. WP Cli http://wp-cli.org/ • Contrôler WP en ligne de commande

    • Propose la plupart des actions de base • Facilement extensible pour appeler des actions de plugins
  21. WP Migrate Db Pro https://deliciousbrains.com/wp-migrate-db-pro/ • Synchronise les bases dans

    les deux sens • Renomme les url complètes à la volée • Gestion de profils pour le renommage • Licence à partir de 90 $
  22. WP Migrate Db Pro Cli Addon https://deliciousbrains.com/wp-migrate-db- pro/doc/cli-addon/ • Permet

    d’appeler les scripts de WP Migrate Db en ligne de commande • Donc on peut automatiser • À partir de la licence Developer (199 $)
  23. WP REST API http://wp-api.org/ • Pratique pour l’ajax • Pratique

    pour un front-end indépendant • Plugin, intégré au core courant 2015 ?
  24. Versioning $ mkdir <project> $ cd <project> $ git init

    $ git commit -m “First commit” --allow-empty
  25. Versioning • Télécharger WP • Décompresser l’archive dans <project> •

    Créer .gitignore : .htaccess wp-config.php wp-content/uploads/ • Versionner un wp-config.php.default
  26. Versioning En prod : • Désactiver l’éditeur de fichiers php

    • Désactiver l’installation de plugins via l’admin wp-config.php : define(‘DISALLOW_FILE_EDIT’, true); define(‘DISALLOW_FILE_MODS’, true);
  27. Versioning • Ne pas désactiver l’updateur automatique ◦ Wordpress applique

    seul les mises à jour de sécurité critiques sur la prod ◦ Les mises à jour seront versionnées plus tard ◦ Pendant ce temps, le site est protégé
  28. Premier déploiement • Code : git et capistrano • Base

    : WP Migrate Db Pro • Assets : rsync
  29. Tests unitaires • Installer PHPUnit • Initialiser un squelette de

    test de plugin avec WP Cli (+ svn et wget) : $ wp scaffold plugin-tests my-plugin $ cd $(wp plugin path my-plugin --dir) $ bash bin/install-wp-tests.sh wordpress_test root '' localhost latest $ phpunit