Slide 1

Slide 1 text

Peut-on travailler proprement avec Wordpress ? Pierre-Emmanuel Fringant http://www.mh-communication.fr @pefringant

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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/

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

● 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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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)

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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é

Slide 34

Slide 34 text

Thèmes, plugins payants

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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 $

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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 ?

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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é

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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