$30 off During Our Annual Pro Sale. View Details »

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. Peut-on travailler proprement
    avec Wordpress ?
    Pierre-Emmanuel Fringant
    http://www.mh-communication.fr
    @pefringant

    View Slide

  2. Photo : Kim Seng
    https://www.flickr.com/photo

    View Slide

  3. Pourquoi Wordpress ?
    ● Facilité d’installation
    ● Documentation
    ● Plugins
    ● Thèmes
    ● Mises à jour de sécurité automatiques
    ● Interface d’admin

    View Slide

  4. Interface d’admin de Wordpress
    ● Ergonomie
    ● Sauvegarde automatique, historique
    ● Prévisualisation
    ● Gestion des médias
    ● Gestion des utilisateurs
    ● Gestion des droits

    View Slide

  5. “Travailler proprement”
    ● Machine virtuelle
    ● Versioning
    ● Hébergement de qualité (ssh)
    ● Déploiement automatisé
    ● Suite de tests

    View Slide

  6. Pourquoi proprement ?
    ● Travail à plusieurs
    ● Maintenance
    ● Automatisation = risque d’erreur réduit
    ● Satisfaction personnelle

    View Slide

  7. Pourquoi c’est dur de travailler
    proprement avec Wordpress ?
    ● Philosophie
    ● Communauté
    ● Dette technique du projet
    ● Architecture du code
    ● Architecture des plugins

    View Slide

  8. Composants
    ● Core
    ● Thèmes
    ● Plugins
    ● Développements spécifiques
    ● Contenu

    View Slide

  9. Core
    ● Versionner directement dans le projet
    ● Dépendance avec Composer
    https://roots.io/bedrock/

    View Slide

  10. 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/

    View Slide

  11. Points bloquants
    ● Configuration
    ● Mélange du contenu et de la présentation

    View Slide

  12. 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

    View Slide

  13. ● 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

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. GenerateWP
    http://generatewp.com/
    ● Custom Post Type
    ● Taxonomy
    ● Menu
    ● Sidebar
    ● Shortcode
    ● …
    ● Exporter en PHP dans des plugins séparés

    View Slide

  17. View Slide

  18. View Slide

  19. View Slide

  20. 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

    View Slide

  21. 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)

    View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. View Slide

  26. View Slide

  27. View Slide

  28. wp-content/themes//archive-recipe.php

    View Slide

  29. 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

    View Slide

  30. Architecture
    ● wp-content
    ○ plugins
    ■ plugins vendors
    ■ plugins spécifiques au projet
    ○ themes
    ■ theme parent
    ■ theme enfant

    View Slide

  31. 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

    View Slide

  32. À surveiller
    http://versionpress.net/
    ● Permet de versionner les fichiers et la base
    ● Synchronisation des environnements
    ● Encore en développement

    View Slide

  33. 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é

    View Slide

  34. Thèmes, plugins payants

    View Slide

  35. Plugin
    ● Advanced Custom Fields
    ● WP Cli
    ● WP Migrate Db (Pro)
    ● WP Migrate Db Cli Addon
    ● WP REST API
    Thème
    ● Underscores
    Quelques incontournables

    View Slide

  36. 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

    View Slide

  37. 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 $

    View Slide

  38. 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 $)

    View Slide

  39. 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 ?

    View Slide

  40. Underscores
    https://github.com/automattic/_s
    ● Thème clean
    ● Par les créateurs de Wordpress
    ● Option Sass

    View Slide

  41. Versioning
    $ mkdir
    $ cd
    $ git init
    $ git commit -m “First commit” --allow-empty

    View Slide

  42. Versioning
    ● Télécharger WP
    ● Décompresser l’archive dans
    ● Créer .gitignore :
    .htaccess
    wp-config.php
    wp-content/uploads/
    ● Versionner un wp-config.php.default

    View Slide

  43. Versioning
    $ git add .
    $ git commit -m “Wordpress installation”

    View Slide

  44. 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);

    View Slide

  45. 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é

    View Slide

  46. Premier déploiement
    ● Code : git et capistrano
    ● Base : WP Migrate Db Pro
    ● Assets : rsync

    View Slide

  47. WP Deploy
    https://github.com/Mixd/wp-deploy
    ● Tâches de déploiement pour WP avec
    Capistrano 3
    ● Le core de WP est un submodule git

    View Slide

  48. 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

    View Slide

  49. Des questions ?
    [email protected]
    http://www.mh-communication.fr
    @pefringant

    View Slide