Cet article est plus là pour mon moi du futur, mais ça peut en aider d’autres.
Suite à la mise à jour vers Gravity Form 2.6.2, je me suis retrouvé sur plusieurs sites dont j’ai la maintenance avec une erreur fatale ressemblant à:
[06-May-2022 20:30:52 UTC] PHP Fatal error: Uncaught Error: Call to a member function can_be_used() on bool in /var/www/my-great-website/wp-content/plugins/gravityforms/common.php:2813
Stack trace:
Je n’ai pas trop creusé pour en connaitre la cause… je ferais ca un peu plus tard… quand un site client est en rade… on corrige vite 😉
Pour corriger cette erreur il m’a suffit d’ajouter
define( 'GF_CACHE_DEBUG', true );
dans le `wp-config.php` puis d’aller resauver les réglages des formulaires (sans rien changer)
Cette erreur arrive lorsque la vérification de licence échoue. Les développeurs de Gravity Forms sont en train d’étudier la question et vont publier prochainement une nouvelle version.
La constante ajoutée permet de valider la licence sans prendre en compte les données en cache.
Dites-moi en commentaire si vous avez eu cette erreur et que cette astuce vous a aidée!
Aujourd’hui, l’idée, c’est de déployer automatiquement vos développements quand vous poussez vos modifications sur GitHub
État des lieux
Actuellement, je publie mes modifications sur les sites WordPress de mes clients grâce au DeployHQ.com. C’est un service très simple à mettre en place:
On paramètre la connexion SFTP sur notre hébergement
A ce moment la, DeployHQ ajoute un webhook qui sera déclenché à chaque push sur une branche définie de notre repo Github qui lancera le déploiement.
Quelques secondes plus tard (ou ça se compte en seconde), vos modifications sont en ligne.
DeployHQ fonctionne bien… alors pourquoi changer ?
Ben oui pourquoi ?
Au-delà de cette raison tout à fait louable, il se trouve j’avais envie de tester une alternative !
Principe des Github Actions
En simple, Github Actions permets d’automatiser des taches selon des évènements se produisant sur le dépôt sur lequel il est actif.
Des taches, il peut y en avoir des centaines, voir des milliers et afin d’aider les développeurs, Github a mis en place une place de marché ou chacun peu publier son Action afin de la partager.
Le principe:
On crée un fichier de configuration au format yml.
Ce fichier est stocké dans votre dépôt GitHub
Lorsque l’action définie dans le fichier de configuration est exécutée, GitHub Actions entre en jeu et exécute alors les tâches qu’on lui a demandées.
Passons à la pratique
Dans le paragraphe précédent, je vous ai parlé d’une place de marché. Sur cette place de marché, je suis tombé sur https://github.com/marketplace/actions/ssh-deploy qui selon la description, fait exactement ce dont j’ai envie.
En pratique, il faut créer dans votre projet un dossier .github qui contiendra lui-même un dossier workflows. À l’intérieur de ce dossier vous ajouterez un fichier qui portera le nom que vous voudrez, mais qui sera au format yml. Par exemple deploy.yml.
La clé SSH privée servant au déploiement. Selon la doc de l’Action, vous pouvez en créer une avec la commande:
ssh-keygen -m PEM -t rsa -b 4096
Cette commande va créer une clée privée, a garder secrete et une clé publique.
La clé publique est à ajouter dans le fichier /home/user/.ssh/authorized_key de votre serveur / Hébergement. Le chemin sera à adapter selon que vous êtes sur un hébergement mutualisé autorisant SSH ou sur un serveur dédié ou autre cas.
La clé privée doit quant à elle être stockée sur votre compte Github dans les réglages du dépôt que vous voulez déployer. Le principe sera le même pour chacune des instructions qui suivront.
En cliquant sur « New repository secret » vous aurez 2 champs.
Le champ « Name » prendra la partie en majuscule de vos réglages soit par exemple SERVER_SSH_KEY
Le champ « Value » prendra quant à lui la valeur à envoyer lors du transfert (ici la valeur de la clé privée)
Normalement… si tout s’est bien passé, vos modifications sont téléversées automatiquement lorsque vous les poussez sur votre branche principale (ou sur la branche que vous avez choisie)
Conclusion
Vous savez maintenant utiliser les Github Actions pour déployer vos sites, il ne reste plus qu’à faire de jolis site web 😉
Si comme moi vous êtes développeur WordPress mais que vous hébergez vos sites chez WPEngine, sachez qu’il existe une action qui permet de déployer directement chez WPEngine !
Je débute avec cet outil… si vous avez des questions… c’est pas gagné, mais tentez quand même en laissant un commentaire.
Si vous avez l’habitude de créer votre propres icônes web, vous devez connaître Icomoon. Pour un projet client utilisant déjà FontAwesome, j’ai eu besoin d’ajouter 2 icônes personnalisées provenant en utilisant le service Icomoon.
Pour cet article, j’ai utilisé Icomoon mais vous devriez pouvoir adapter, vous inspirer de cet article pour insérer n’importe quel icône personnalisé.
Les icônes FontAwesome étaient utilisées sur des éléments de menu grâce à Advanced Custom Fields et Advanced Custom Fields: Font Awesome Field. le but est donc d’ajouter à la liste des icônes FontAwesome, mes 2 ou 3 icônes customs d’icomoon.
Afficher les icones Icomoon dans le champs ACF FontAwesome
Advanced Custom Fields: Font Awesome Field que je nommerai dorénavant ACFFA propose un filtre permettant de venir modifier la liste des icônes:
Ici nous filtrons la liste existantes des icônes FA pour y ajouter nos icônes personnalisées. Malheureusement, l’extension de Matt Keys étant développées pour FA, seules les catégories FontAwesome sont disponible à savoir Brand (fab), Regular (far), Style (fas). J’ai décidé d’ajouter mes icônes dans les Regular soit Far. Ceci est purement arbitraire.
Si vous êtes habitués a développer vos thèmes vous connaissez le hook d’action WordPress wp_enqueue_scripts qui permet de charger des feuilles de styles et des scripts en front-end. Sachez qu’il existe aussi un équivalent pour le back-office et il se nomme admin_print_styles.
Ici je charge donc la feuille CSS en front et en back-office.
J’ai mis une priorité 9 au chargement front afin de passer juste avant le chargement de la feuille de style du thème et de pouvoir par la suite les utiliser dans mon thème. Par défaut un add_action() à une priorité de 10.
Afficher les icônes en front office
En front-office, l’extension ACF FontAwesome retourne un balisage HTML formaté pour FA (normal!). Nous, on veut que dans certains cas, celui de notre icône personnalisée on aille charger une autre police (celle générée par Icomoon).
Icomoon m’a fourni 4 fichiers de polices de caractères ( .eot, .svg, .ttf et .woff) que j’ai placé dans mon projet. Le fichier icomoon.css fait un @font-face afin que les polices soient chargées
Le problème réside dans le fait que l’extension de Matt Keys génère un markup HTML FA et qu’il va falloir « ruser » pour détourner le fonctionnement seulement pour les icônes Icomoon. Et oui, on veut pouvoir continuer à utiliser normalement FontAwesome!
<i class="far cierge" aria-hidden="true"></i>
On retrouve la class far de FA qui va charger la police FontAwesome puis la class cierge générée à partir du nom données dans la liste des extension a insérer.
Pour que le site charge ma police au lieu de celle de FontAwesome, j’ai créé une feuille CSS modifiant le style des ces classes:
Pour chaque icône personnalisée je demande à WordPress de charger ma-police-icomoon et d’utiliser le contenu ayant le code hex corespondant à mon icône.
Carbon Fields est une solution concurrente du célèbre Advanced Custom Field (ACF) mais qui a la particularité de pouvoir être embarqué dans vos thèmes et extensions maison.
En effet, vous ne pouvez pas utiliser ACF Pro dans vos extensions gratuites a destination par exemple du dépôt WordPress.
Comme ACF, Carbon Fields propose une solution entièrement en PHP pour créer des blocs compatibles avec le nouvel éditeur de WordPress: Gutenberg!
Les blocs Gutenberg ont fait leur apparition dans Carbon Fields 3.0.
Installer Carbon Fields
Attention, la version disponible sur le dépôt WordPress est loin d’être à jour.
Bien sur, votre système doit disposer de Composer mais si vous suivez cette section, je suppose que vous connaissez, l’avez déjà installé sinon je vous invite à suivre la seconde méthode, sans Composer ou bien à installer Composer.
Rendez vous dans le répertoire de l’extension ou du thème dans lequel vous voulez ajouter votre bloc Gutenberg.
Pour la suite du tutoriel, je partirais du principe que nous sommes dans une extension mais dans le cas d’un thème, vous initialiserez Carbon Fields dans votre functions.php.
La commande :
composer require htmlburger/carbon-fields
va installer carbon-fields dans le dossier vendor de votre projet. Si celui-ci n’existe pas, alors il sera créé.
Ensuite dans le fichier principal de votre extension, ajoutez le code suivant:
Ensuite il conviendra d’adapter la fonction de chargement:
Création d’un Bloc Gutenberg en PHP
Comme je le disais en introduction, Carbon Fields est un produit similaire à ACF à ceci près qu’il ne dispose pas d’une interface graphique pour la création des champs personnalisé.
C’est un paragraphe dédié à la création de bloc Gutenberg et il nous cause de champs personnalisé… il a craqué!
mes gentils lecteurs 🙂
Effectivement, si je vous parle de champs personnalisé ici c’est que, comme ACF, ils vont être la matière première pour créer notre bloc.
Tous les types de champs que vous retrouverez dans la documentation sont utilisable pour ajouter des réglages a notre bloc Gutenberg.
En route pour la création!
Première étape, créer un fichier PHP qui accueillera vos déclarations de fonctions qui créeront le bloc.
Ici c’est selon vos habitudes, en procédural ou en POO, un simple fichier PHP ou bien une classe.
Je vais pour ce tutoriel l’écrire en PHP procédural afin qu’il soit le plus accessible possible. Ceux ayant l’habitude de développer en Orienté Objet, n’auront aucun mal à adapter leur code.Créer un fichier mon-block.php
Une fois créé, nous allons déclarer le bloc:
Expliquons ce que fais ce code:
use Carbon_Fields\Block;
va simplement dire a notre fichier PHP qu’il faut utiliser Carbon_Fields et notament la sections dédié aux Blocks.
Block::make( __( 'My Shiny Gutenberg Block' ) )
va déclarer le bloc auprès de WordPress. Il aura ici le nom de « My Shiny Gutenberg Block ». Notez que le nom du block est déclaré dans une function d’internationalisation (i18n) qui va permettre de traduire votre bloc.
Il serait d’ailleurs judicieux d’y ajouter votre text-domain ce qui donnerait:
Ensuite vient la déclaration des paramètres de votre bloc Gutenberg qui se fait via la méthode add_fields( )
Ici nous ajoutons 3 réglages:
un champ de texte simple
un champ de sélection d’image
un champs de texte riche.
Les champs sont tous créé sur le même modèle:
Field::make( 'type de champs', 'identifiant unique', 'libellé du champs')
Enfin, la méthode set_render_callback() va elle générer l’affichage front ainsi que la prévisualisation de votre bloc Gutenberg.
Dans les faits, écrivez une fonction qui va retourner un html valide et appelez-la dans set_render_callback( )
Dans cette fonction, vous passerez en paramètre $block qui sera un array regroupant les paramètres de votre block. Les clés de ce tableau étant les identifiants unique de votre bloc Gutenberg.
Aller plus loin avec Carbon Fields
Je ne peux pas terminer ce tutoriel sans vous présenter un peu mieux Carbon Fields car tant qu’a l’embarquer dans vos projets pour créer facilement des blocs Gutenberg, autant en tirer tout son potentiel.
Vous pourrez donc avec Carbon Fields créer des champs personnalisés pour tout les types de publications présents sur votre site mais également créer des pages d’options pour votre thème ou vos extensions.
Si vous voulez voir ce que ca donne en live, je vous invite a installer et regarder mon extension WP GestSup Connector qui embarque Carbon Fields et avec lequel j’ai créé un block Gutenberg mais également la page d’option de l’extension.
On lit partout qu’il faut 5 minutes pour installer WordPress… et c’est FAUX ! On nous a menti! On peut l’installer beaucoup plus rapidement que ca…
La preuve en vidéo!
Ceux d’entre vous ayant déjà installé un multisite savent qu’après avoir installé WordPress, il faut rentrer des constantes dans le wp-config.php pour activer ce mode, se rendre dans le Back-Office, paramétrer le reseau et revenir dans le wp-config.php pour y coller un pavé de constantes ainsi que dans le .htaccess… bref largement plus qu’avec le script que je vous ai concocté!
Comment ca marche?
J’ai créé un script bash qui, lorsque vous le lancer vous pose quelques questions.
Rien de méchant, ce sont les informations que vous rentreriez lors de la routine d’installation d’un WordPress via votre navigateur préféré.
Une fois que les réponses sont enregistrées, le script lance l’installation et le multisite est prêt … en 3 minutes!
Bien sur ce script, pour fonctionner aura besoin de wp-cli.
Cet article parlera surement aux développeurs et développeuses d’extension WordPress qui publient sur le dépôt WordPress… et ceux qui n’y publient pas pour ne pas avoir à utiliser SVN.
En effet SVN est en quelque sorte l’ancêtre de GIT et de nos jours rare sont les développeurs qui ne sont pas passer à Git.
GitHub est un service hébergeant des dépôts GIT que les dev affectionnent particulièrement et très utilisé dans le monde Open-Source.
Il y a quelques semaines, GitHub a rendu public les Github actions.
OK mais qu’est ce que c’est Github actions?
En simple, c’est une solution permettant d’automatiser des taches lorsqu’une action intervient sur un dépôt ou une branche d’un dépôt (pull / push…)
C’est là que ça devient intéressant !
Auparavant, pour mon exemple personnel, je versionnais mon code sur GitHub puis je transférais a la main mes fichiers constituant mon extension WordPress sur le SVN de WordPress.org.
Ce tag sera repris sur le dépôt WordPress afin de publier la nouvelle version de votre travail.
On fait comment?
Je ne sais pas si c’est la manière de faire dans les règles de l’art comme on dit… mais c’est la manière que j’utilise… ce sera surement amélioré avec le temps, l’expérience, toussa toussa.
Dans mon projet, je crée un dossier .github notez le point devant puis un sous-dossier workflows.
Créé dans ce dernier dossier un fichier nommé `main.yml`:
Rendez-vous sur votre dépôt Github, dans l’onglet « Actions » vous devriez retrouver l’action créée plus tôt.
Nous avions utilisé une variable SVN_PASSWORD et une SVN_USERNAME correspondant aux identifiant SVN nécessaire pour publier sur le repo WordPress. Il va falloir les transmettre a Github pour qu’il puisse se connecter de façon sécurisée.
Rendez vous dans l’onglet « Settings »
Cliquez sur « Add a new secret »
Dans l’input « Name », saisissez le 1er nom de variable soit « SVN_PASSWORD » et le saisissez le mot de passe de votre compte wp.org dans le textarea « Value ».
Répétez en adaptant pour la variable correspondant à votre mot de passe.
Testez!
Si tout s’est bien passé, la prochaine fois que vous créerez et pusherez un tag Git, votre extension sera automatiquement publiée sur le dépôt Officiel WordPress.
Je vous ai déjà parlé rapidement de Lando il y a quelques temps…. c’était plus un cri du coeur d’avoir trouvé une solution simple pour utiliser la technologie Docker.
Qu’est ce que Lando ?
Comme je vous expliquais dans mon article précédent, Lando est une sur-couche permettant d’utiliser facilement la technologie Docker.
Pour faire simple, il faut voir Docker comme un outils modulaire ou chaque brique est le composant de votre serveur Web. Vous aurez donc besoin par exemple, pour faire tourner un WordPress en local d’une brique Apache, d’une brique PHP et d’une brique Mariadb ou Mysql. Parmi ces différentes briques, il y a des versions différentes. Par exemple PHP7.0 / PHP7.3 . Pour développer sainement et éviter les mauvaises surprises lors d’une mise en production, il peut être intéressant d’utiliser lors de nos développements les mêmes versions logiciels que celles utilisées par le serveur qui hébergera le site Web au final. Ainsi on réduit les risques de conflits et erreurs.
Le but de Docker est donc de fournir ces différentes briques et de les faire travailler ensemble… sauf que…
Sauf que, comme je le disais dans mon précédent article, il faut paramétrer tout ca… et avoir des connaissances sysadmin que nous n’avons pas tous… heureusement Lando est arrivé
Installer Lando
Le plus dur dans l’installation de Lando est en fait l’installation de Docker qui est assez simple si vous êtes libre comme moi, c’est à dire sur une distribution Linux. C’est un peu plus compliqué si vous êtes prisonnier d’un système privateur tel Windows ou Mac OS. (Pour une fois qu’on a un truc plus simple sous Ubuntu Linux… )
Bref, Docker tourne nativement sous Linux, il faudra ajouter une machine virtuelle pour installer Docker sur Windows ou Mac OS.
Une fois Docker installé, rendez vous sur le site de Lando pour installer la sur-couche qui va mettre en musique tout ça.
Configurer Lando
Je vous disais plus haut que Lando faisait abstraction de la complexité de paramétrage de Docker.
Toute la configuration de votre serveur de développement va tenir en un fichier texte.
Imaginons que nous voulions créer un site WordPress avec pour url https://mon-super-site.lndo.site.
Il suffit de créer un dossier sur votre machine ou vous avez les droits d’écriture et que vous nommeriez du nom que vous voulez: mon-super-site
Dans ce dossier on va ajouter un fichier .lando.yml qui va contenir toute la configuration du serveur de notre site:
C’est tout! Lando est prêt à fonctionner! et vous prêt à développer!
Décorticons le .lando.yml:
Ligne 1: un nom pour votre environnement de développement. Ce nom va servir notament à la construction de l’url de votre projet.
Ligne 2: « Recipe » signifie recette en anglais. Lando a mis au point des préconfiguration selon ce que vous aller faire avec. Ici c’est une recette WordPress, elle installera notament wp-cli. Il en existe pour Pantheon, Drupal et bien plus => Lando Recipe
Ligne 3: un block config ou vous pouvez spécifiez vos versions logiciel
Ligne 7: un block Service ou l’on va lister les services que l’on veut voir fonctionner. ici PhpMyadmin et Mailhog
Ligne 16: Composer c’est quand meme pratique quand on travaille dans l’univers PHP.
Ligne 19: ce block est facultatif si vous travailler sur un domaine simple. Il peut se révéler très pratique dans le cadre d’un WordPress Multisite en sous-domaine par exemple.
Ligne 22: peut etre la partie la plus sympa… effectuer des taches juste après l’import d’une base de donnée… ici on effectue via wp-cli un search & replace pour adapter les url et on désactive l’excellente extension WordPress WP-Rocket car le cache en dev… comment dire 😉
Ce .lando.yml est assez simple et il existe une multitude d’autre configuration et possibilité pour coller au mieux a vos besoin.
Notez que Lando est orienté pour le développement et fortement déconseillé par ses développeur pour une production
Pour lancer une première fois Lando, il convient de faire un `lando rebuild –y`.
A ce moment, il va créer et télécharger ce dont il a besoin. Cette étape peut être longue selon votre connexion web mais elle ne se fera qu’une fois…
Ensuite pour les prochains lancements un `lando start` dans votre terminal positionné dans votre dossier de travail suffira.
Attention la recette WordPress prépare lando techniquement a recevoir WordPress mais n’installe pas WordPress. Vous effectuerez cette étape d’installation comme vous en avez l’habitude ou bien en utilisant ma méthode wp-cli.
J’utilise Local By Flywheel… ca fait pareil!
Hummm chaque solution à ses avantages et ses inconvénients. Lorsque j’ai décidé de tester et finalement d’adopter Lando, Local By Flywheel n’était pas disponible sous Linux. Ce n’est plus le cas depuis l’été 2019.
J’ai testé (trop) rapidement Local By Flywheel et je n’ai pas réussi a faire fonctionner un WP :-/ (notez le trop).
La seule chose que Flywheel apporte pour mon cas est une GUI (Graphical User Interface) alors que Lando… c’est en ligne de commande… mais sincèrement pour faire lando start ou `lando rebuild –y` ? installer une interface qui va forcément utiliser des ressources machine… je n’en ai pas vu l’utilité.
On a été longtemps habitué a utiliser les outils et services de Google pour faire tout un tas de chose… seulement les bonne choses ont une fin et certains de ces services ferment ou deviennent payant.
Dans le cadre du développement de mon extension OpenAgenda pour WordPress, j’ai besoin de trouver la longitude et la latitude d’une adresse d’un évènement.
OpenStreetMap à la rescousse
Il existe heureusement beaucoup de services permettant de remplacer ceux de Google. Parmi eux OpenStreetMap (OSM) pour tout ce qui tourne autour des cartes et la géolocalisation.
Nominatim pour la conversion d’adresse en donnée de localisation.
Ligne 1: on déclare une fonction dans laquelle je passe en parametre une adresse (rue code postal ville).
Ligne 2: j’encode cette adresse pour qu’elle soit intégrable dans une URL.
Ligne 3: je vérifie si un transient avec les coordonnées existe. Nominatim limite l’accès a son PAI… le transient permets donc de stocker les infos en locale et de ne pas faire une requete a chaque affichage… surtout que les coordonnées géographique d’un point ne devrait pas changer trop souvent…
Ligne 14: je crée le transient qui sera valable 90 jours. En gros, votre WordPress ne demandera la géolocalisation qu’une fois tous les 90 jours pour une même adresse.
Entre 2 : si l’adresse n’a jamais été géocodée alors je fais la demande a l’API de Nominatim
Des idées ou amélioration a apporter ? Laissez moi un commentaire!
WordPress, comme tous les framework de développement dispose de ses propres règles à suivre pour que chacun des développeurs puissent lire et comprendre facilement le code d’un confrère.
C’est ce qu’on appelle les « Codings Standards » soit en français les standards de codage. Pour WordPress, nous avons les WordPress Codings Standards plus connu sous le joli nom de WPCS!
OK, on a ouate mille page de docs… mais je vais pas lire toutes ces docs tout en développant… t’as pas plus simple?
Et ben vous avez de la chance puisque nous pouvons intégrer ces règles directement dans nos IDE ou éditeurs de texte! Ainsi votre code sera vérifié automatiquement lors de vos développement.
J’utilise quotidiennement PHPStorm de Jetbrains mais sachez que ces règles sont utilisable sur quasiment tous les éditeurs de codes.
Ou trouver les WPCS?
Les WPCS sont disponible sur Github. Je vais vous détailler comment moi je fais, mais vous pouvez lire en anglais qu’il y a plusieurs méthodes. Faites votre choix!
La méthode de Séb pour installer les WPCS
Alors ce n’est pas à proprement dit ma méthode… dans le sens ce n’est pas moi qui l’est mis au point… mais c’est celle que j’utilise et que je vais détailler!
Avant d’installer les WPCS, il faut un installer les PHPCS… et oui, WordPress est développé en PHP et pour faire simple, WPCS rajoute des règles ou modifie un peu les règles des PHP Codings Standards.
Retenez que, comme dans tous l’écosystème WordPress, le but est de rendre accessible et faciliter l’accès au développement.
Installer les PHPCS
Personnellement, j’ai une partition sur mon Ubuntu Linux dédiée à mes projets et a coté des projets, j’ai un dossier avec les WPCS et un avec les PHPCS
Rendez vous a l’endroit où vous voulez télécharger les règles puis:
ou
Si vous n’avez pas renseigné de clé SSH sur votre compte GitHub.
Vous devriez normalement avoir maintenant un dossier nommé phpcs.
Cloner le dépôt Github des WPCS
On va réaliser quasiment la meme commande pour cloner le dépot des WPCS cette fois ci:
ou
Je vous rassure, le plus dur est fait…
Paramétrer PHPStorm
Rendez vous dans « File | Settings | Languages & Frameworks | PHP | Quality Tools »
En cliquant sur les 3 point à droite de Configuration vous pourrez spécifier le chemin vers les PHPCS. Il faudra naviguer et sélectionner le fichier « phpcs » présent dans le répertoire « phpcs/bin » obtenu grace au clonage précédant.
Si tout est OK, en bas de la fenêtre affichera la version de Code Sniffer installée.
Passons à WPCS, car après tout… ce sont pour eux qu’on en est là !
Le chemin vers les réglages est File | Settings | Editor | Inspections
le but ici est d’arriver au menu « PHP Code Sniffer Validation » afin de cocher « Installed Standard Paths » et de chercher après avoir cliqué sur le dossier à droite le répertoire récédement cloner avec les WPCS.
Si tout se passe bien…en cliquant sur les 2 flèches circulaires, vous devriez avoir le choix de plusieurs WPCS… personnellement, je choisis WordPress-Extra. puis on valide en cliquant sur OK…
Contribuer au projet WordPress? moi? mais je ne suis pas développeur!
Cette phrase nous l’avons tous entendu… et c’est elle qui m’a donné envie de donner cette conférence au WordCamp Bordeaux 2019.
Des développeurs qui contribuent… l’écosystème WordPress en regorge… par contre des utilisateurs finaux, non développeurs, qui contribuent… alors là il y en a beaucoup moins.
Le but de cette conférence est de faire un tour d’horizon des divers univers de contribution possible lorsque nous ne sommes pas développeur.
La technique du Multisite permet de faire fonctionner plusieurs site WordPress ensemble au sein d’une seule et même installation.
Cette technique permet de mutualiser le Coeur de WordPress, les thèmes ainsi que les extensions.
En résulte un gain de temps non négligeable lors de la maintenance de vos sites puisque vous ne mettez à jour qu’une seule fois.
En savoir plus:
Extraire un site d’un multisite étape par étape.
Tout d’abord, ce tutoriel ne se veut pas LA méthode mais une méthode qui fonctionne et que j’ai mis en action aujourd’hui dans le cadre de mon poste de développeur WordPress.
Sauvegardez vos fichiers (WP, extensions, thèmes, mu-plugins et base de données Mysql)
Étape 0 – Installation en local
Avoir le multisite en local, ce sera bien plus simple à gérer et en cas d’accident, ca ne génera que vous!
Étape 1 – Mises à jour
La première étape va consister a mettre votre multisite à jour:
WordPress
Thèmes
Extensions
Langues
Si cette étape n’est pas fondamentale, je me dis que:
ça ne peut pas faire de mal
ça peut éviter les conflits et les soucis par la suite quand vous importerez thèmes et extension dans votre site WordPress « Classique ».
Étape 2 – Installer WordPress
Installer un WordPress tout beau tout neuf… Pour cela je vous propose de le faire en 3 minutes grâce au script wp-cli que j’ai créé pour vous…
OK j’avoue, je l’ai créé pour moi… et je me suis dit que ça pourrait vous intéresser!
Étape 3 – Transférer les fichiers
Alors maintenant, va commencer un transfert de fichiers. Voilà pourquoi je vous ai demandé en étape 0 de travailler en local. e sera bien plus facile de déplacer des fichiers dans l’explorateur de votre machine qu’à distance via un sFTP ou autre.
Pensez à transférer:
Les thèmes (parent et enfants)
Les extensions
Les « mu-plugins »
le dossier « uploads »… mais lui je lui réserve l’étape 4!
Bien sur, sur le multisite peut être que toutes les extensions ou tous les thèmes n’étaient pas utiles pour le site que vous êtes en train d’extraire.
Ne transférez que ce dont vous avez besoin et n’activez rien
Étape 4 – le dossier « Uploads »
Le dossier Upload situé dans `wp-content` contient tous les médias téléversés sur votre site et disponible dans la médiathèque.
Avouez que ce serait ballot de ne pas les retrouver dans votre nouvelle installation.
Le dossier Upload est un peu différent à transférer puisque son architecture de dossiers et de sous-dossier est différent d’une installation classique.
Remarquez la différence avec une architecture classique. Dans « uploads », nous avons un dossier « sites » qui n’existe pas dans une installation classique de WordPress.
A l’intérieur de ce dossier « sites » nous avons un dossier nommé par l’id du site dans l’infrastructure multisite.
Ensuite, nous retrouvons le classement classique des médias par WordPress avec un dossier année et un dossier mois.
Retrouvez l’ID du site a extraire du multisite
J’estime que si vous faites cette manipulation alors vous avez les privilèges de super-administrateur.
Cette étape est assez simple, il faut se rendre dans l’administration réseau de votre multisite puis dans le sous-menu « Sites » au bout de la ligne concernant le site à migrer vous trouverez l’ID de celui-ci.
L’identifiant récupéré vous pouvez déplacer tout le contenu du dossier ayant l’id comme nom dans wp-content/uploads afin de retrouver l’arborescence classique d’un WP.
Étape 5 – exporter puis importer la base de données
C’est bien beau mais pour le moment, vous avez tout sauf votre contenu…. et dans un site, c’est bien le plus important la base de données.
Pour ce tutoriel, je vais estimer que vous avez le préfixe par défaut « wp_ ».
A l’image des médias, WordPress multisite ajoute l’id du site sur certaines tables.
Il va donc falloir exporter toutes les tables ayant l’ID ainsi que les tables wp_user et wp_usermeta qui elles n’ont pas d’id car dans un multisite, les utilisateurs sont commun à tous les sites.
Personnellement je le fais avec PHPmyAdmin si les tables ne sont pas trop volumineuses… on sélectionne les tables voulues (exemple: celle du site « 4 » wp_4_ ainsi que les 2 tables d’utilisateurs).
Avant d’importer, supprimez les tables wp_user et `wp_usermeta` de l’installation classique afin d’éviter les conflits avec les tables que vous allez importer.
Pour l’import dans le WP classique, utilisez également l’outils dont vous avez l’habitude.
Vous allez vous retrouver avec des tables en doublons: Celles de votre installation classique et celle que vous venez d’importer qui ont le préfixe `wp_4_`. Supprimez les tables en doublons de l’installation classique.
Importez vos tables « multisites »
A cette étape, si vous regardez votre base de données dans PHPmyadmin ou autres, vous devez remarquer des tables en wp_ et d’autres en wp_4_
Dans PhpMyadmin, cochez toutes les tables en `wp_4_` puis en bas de la page dans le menu déroulant sélectionnez « Remplacez le préfixe de table »
Si vous décidez de modifier le préfixe de table, n’oubliez pas de corriger le `wp-config.php` en conséquence.
On y est presque!
Étape 6 – Remplacer les URLs des médias en Base de données.
Lors de l’import de la base de données, nous avons importé tous les utilisateurs du multisite… or, il y en a qui n’ont aucun rapport avec le site que vous venez d’extraire.
Je n’ai malheureusement pas encore trouvé une requête sql qui va bien … si vous avez une idée, soumettez la moi en commentaire, c’est avec joie que j’améliorerais ce tutoriel.
Étape 8 – Vérifications
Normalement, votre site classique est une copie exacte de votre site lorsqu’il était dans le multisite.
Selon vos installations, il peut y avoir 2/3 choses à régulariser. Exemple, remplacer des urls vers des images écrites en dur dans des fichiers css créé parle constructeur de page Elementor…
Vous avez peut être transférer des extensions qui n’ont un intérêt que dans le cadre d’un multisite…
Étape 10 – Se reposer!
Ouais y’a pas d’étape 9 car ça fait bien de s’arrêter sur un chiffre rond! une dizaine tout ça!
Normalement vous venez d’extraire sans encombre un site d’un multisite vers un site classique WordPress… vous avez bien mérité une petite mousse, un café ou n’importe qu’elle autre chose qui vous fera plaisir!
Et sinon, il y a la méthode simple! (ajout du 20 avril 2019)
Si comme moi vous êtes adepte de WP-CLI alors ce script vous permettra d’extraire un site du multisite en quelques secondes…
trepmal/blog-extractor
WP-CLI command. Extract single blog from multisite – trepmal/blog-extractor
Avouez le, si vous avez plusieurs sites a maintenir et que vous ne voulez pas passer par le bouton « mettre a jour »pour des raisons pratiques et de rapidité, les extensions premiums sont assez chia… casse-pieds à gérer.
Quelles solutions pour mettre ses extensions premiums WordPress à jour?
Vous avez plusieurs solutions:
Se rendre sur le site de l’éditeur de l’extension, sur son profil, récupérer le .zip de la mise a jour et la transférer via FTP ou via Git selon les habitudes de chacun. Cette opération sera a réitérer sur chacun de vos sites…
Avoir une copie de « dev » de ses sites en local avec les clés API renseignées et cliquer sur le bouton qui va bien…
Avoir un dépôt Composer avec les dernières version de ses extensions premiums WordPress disponible.
Et c’est bien cette dernière solution que je compte vous présenter dans ces quelques lignes!
Composer est un gestionnaire de dépendance pour PHP mais ce tutoriel n’a pas pour but de vous expliquer le fonctionnement de ce logiciel. Etant très répandu, d’autres vous expliquerons tout ca bien mieux que moi.
L’idée est donc de créer son propre dépôt Composer sur lequel nous pourrons téléverser les différentes extensions dans leurs dernières versions ensuite il suffira de lancer une mise a jour via Composer sur nos différents projets! Et c’est justement ce que propose Release Belt de Rarst.
Découvrons Release belt
Release Belt est un projet de logiciel libre développé par Andrey Savchenko.
L’installation est assez simple puisqu’il vous suffit de cloner un dépot Git sur votre hébergement Web. Personnellement j’ai créé un sous domaine composer.thivinfo.com sur lequel j’ai installé Release Belt.
Le Readme est assez clair et en 3 commandes votre dépôt composer sera créé:
git clone https://github.com/Rarst/release-belt
cd release-belt
composer belt-update
A ce stade, votre dépot composer privé est installé, il ne reste plus qu’a téléverser les zip de vos extensions sur ce dépôt.
Pour cela il faut créer dans le répertoire releases un dossier « type » puis dans ce dossier type, créer un dossier avec le nom de l’extension et a l’intérieur de celui téléverser le zip… quoi c’est pas clair ?!
Le dossier « Type » peut être un dossier nommé par un nom natif de composer ou dans le cas qui nous interesse: « wordpress-plugin » mais ces possibilités existent:
wordpress-plugin
wordpress-theme
wordpress-muplugin
wordpress-dropin
Potentiellement, vous pourriez gérer tout autres projets autre que WordPress en utilisant ces types.
Chez moi le chemin vers les versions de SeoPress Pro ressemblera donc à /public_html/prod/composer/release-belt/releases/wordpress-plugin/wp-seopress-pro où
/public_html/prod/composer/ corresponds à la racine de mon installation Release Belt
/releases/wordpress-plugin/ le répertoire contenant la liste de mes extensions hébergées
Afin que seul vous ou les utilisateurs autorisés puissent accéder à votre dépôt Composer, je vous conseille fortement de le protéger via un système d’authentification. Les développeurs d’extensions ou de thème premium pourraient ne pas aimer que vous partagiez gratuitement leur travail.
Utiliser son dépôt Composer personnalisé dans un projet WordPress.
Toutes les informations utiles se trouve sur la page d’accueil de votre dépot Composer. Chez moi c’est donc composer.thivinfo.com.
Si vous êtes un habitué de composer, vous saurez analyser les informations fournies par cette page auto-générée par Release-Belt.
Sinon il faut déclarer le dépôt dans votre composer.json:
Dans l’épisode précédent, je vous présentais simplement (du moins je l’espère) comment mettre en place un multisite sous WordPress. Nous avons vu que nous pouvions donc créer sur la base d’une seule installation WordPress autant de site que nous voulions.
Les sites créés avaient alors 2 syntaxes possibles:
en sous-domaine ex: site1.example.com
en sous-dossier ex: example.com/site1
Avouez que c’est un bon début mais que si en plus on pouvait avoir une URL personnalisée… Alors ce serait parfait!
Quand je parle d’URL personnalisée, je veux dire une adresse de site comme thivinfo.com pour le 1er site et tartempion.com pour le second.
C’est précisément maintenant que le domain mapping intervient.
Mise en place coté registrar
Et oui, il va falloir paramétrer le ou les noms de domaines que vous voulez mapper chez votre registrar. Je ne peux pas vous détailler la façon de faire car elle est propre à chaque hébergeur selon le panel d’administration utilisé.
Sachez que, si votre nom de domaine est géré par votre hébergeur, il faut faire pointer ce domaine à la racine du dossier contenant votre installation WordPress.
Mise en place coté WordPress
Une fois que vos domaines pointent sur le bon dossier, il faut prévenir WordPress qu’il va devoir gérer 1 ou plusieurs autres domaines.
Concrètement, on va imaginer que j’ai un réseau de site WordPress sur le domaine tuto-multisite.local et que sur ce reseau de site j’ai un site https://tartempion.tuto-multisite.local.
https://tartempion.tuto-multisite.local est une URL tout a fait accessible (en local mais le principe est identique sur une URL publique) et je pourrais rester comme ça. Sauf que pour communiquer il serait plus simple de donner comme URL tartempion.com.
Le but est donc de faire pointer toutes les requêtes de tartempion.tuto-multisite.local et de les envoyer sur tartempion.com.
Si vous retournez dans les réglages du Domain mapping vous verrez ce nouveau menu de réglages :
Sauvegardez bien vos paramétrage et… votre multi-site multi-domaine WordPress est prêt! \o/
Mappez son 1er domaine WordPress
On va donc mapper tartempion.com sur tartempion.tuto-multisite.local.
Etant en local et ne possédant pas réellement le domaine tartempion.com, je vais modifier le fichiers hosts de ma machine pour simuler ce domaine.
Je me rends sur l’administration de mon site à mapper https://tartempion.tuto-multisite.local/wp-admin/ puis dans le menu « Outils/Domain Mapping ».
Vous trouverez cette page:
Renseignez votre domaine à mapper (dons mon cas tartempion.com sans http ou https). Si le domaine sera le domaine principal alors cochez « Primary domain for this blog ». Vous pourrez ainsi avoir autant de domaine mappez pour un site (le www.tartempion.com par exemple) mais un seul sera servi.
Bravo! Vous avez mappé votre premier domaine !
Merci à Bruno Tritsch d’avoir réalisé le tutoriel vidéo suivant illustrant parfaitement mon tutoriel.
Si vous me lisez, certainement que vous utilisez régulièrement mon CMS préféré à savoir WordPress.
WordPress est un logiciel libre ou Open-Source en anglais. C’est à dire que le code du logiciel est disponible et que vous pouvez le modifier et l’améliorer comme bon vous semble… Il y a quelques limitations tout de même… vous devez entre autre repartager vos améliorations.
Pourquoi contribuer?
Je pense qu’il y a autant de raison de contribuer au projet WordPress qu’il existe de contributeurs…
La raison qui revient très souvent lorsqu’on en parle avec d’autres contributeur c’est :
Je contribue à WordPress pour apporter ma pierre à l’édifice et rendre la pareille au CMS et à sa communauté.
Vous aurez probablement votre propre raison, mais faire parti de cette aventure aura une place dans ce choix.
Les différentes façon de contribuer au projet WordPress.
Lorsqu’on parle de contribution la majeur partie des personnes pensent au code: Contribuer en apportant des améliorations au CMS via du code. Seulement, tout le monde n’est pas développeur et pourtant, nous pouvons tous contribuer!
Il existe (pour le moment) 18 pôles de contribution. Vous pouvez les rejoindre en visitant cette page: https://make.wordpress.org/ qui est le portail central de la contribution WordPress.
Ces 18 pôles seraient les façons de contribuer officiellement à WordPress mais il existe bien d’autres manière d’apporter sa pierre à l’édifice.
JB Audras a commencé une série d’article sur le thème de la contribution au Coeur de WordPress.
Contribuer en publiant
Vous vous sentez l’âme littéraire? Écrire des articles sur votre site internet à propos de WordPress. Que ce soit pour expliquer techniquement une action menée lors d’un développement ou bien expliquer comment vous utilisez telle ou telle extension… c’est Contribuer à WordPress.
Contribuer en organisant ou en participant à des évènements autour de WordPress
Vous vous rendez à un Meetup WordPress? à un WordCamp c’est un début de contribution car vous faites une démarche pour le CMS WordPress. Vous allez en parler, y retourner. Bref vous allez faire vivre la communauté.
Bien sur l’étape suivant la participation à un évènement est bien souvent sa particpation en tant qu’organisateur ou bénévole lors de WordCamp. Sachez qu’a chaque WordCamp il y a un appel à bénévoles. Les Bénévoles lors de WordCamp sont les petites mains qui font en sorte que l’évènement soit réussi.
Pour le moment en France, il existe 4 WordCamp:
Si vous vous sentez l’âme voyageuse, il en existe dans le monde entier! voici les prochains en Europe et dans le monde
Chacun de ses évènements feront des appels et je vous invite à suivre les comptes Twitter de chacun d’entre eux pour rester informé.
Vous n’habitez pas près de l’un de ces 4/5 WordCamp? Vous ne vous voyez pas traverser la France pour nous rencontrer ? On est bien triste mais il y a des évènements autour de WordPress un peu partout (à suivre sur l’agenda de WPFR)
J’espère que ces quelques lignes qui sont bien loin de relater toutes les formes de contributions possible vous donnerons envie de creuser le sujet 😉
Si la contribution à WordPress vous intéresse mais que vous ne savez pas comment commencer, n’hésitez pas à me laisser un commentaire, j’essaierais de vous aider au mieux.
O2Switch est un hébergeur français proposant pour un tarif tout a fait compétitif un hébergement mutualisé de qualité avec de surcroît un support technique très réactif… ce qui n’est pas forcément le cas des grands noms de l’hébergement. Je suppose dans cet article que vous disposez d’un hébergement chez eux.
Ce tutoriel WordPress fait suite aux 2 premiers consacrés à la création d’un WP multisite et au Domain Mapping sur WordPress qui ont été réalisé sur une instance locale. Je suppose que vous avez suivi ces 2 premiers tutoriels pour suivre celui ci et que vous disposez de 2 sites parfaitement fonctionnels sur un multisite.
Pour ce tutoriel, nous nous servirons de https://site1.thivinfo.eu/ et https://site2.thivinfo.eu/
Le Multi domaine, Pourquoi faire?
Nous avons vu dans nos précédents tutoriels que nous pouvions disposer de plusieurs sites internet avec une seule installation WordPress mais tous avaient le même type d’url (en sous-domaine ou en sous-répertoire).
Aujourd’hui, nous allons voir comment faire en sorte d’avoir des urls complètement différentes en l’occurrence sebastienserre.com au lieu de site1.thivinfo.eu et developpeur-wordpress.paris* au lieu de site2.thivinfo.eu.
Paramétrer les domaines chez O2Switch
Ici, le but est de diriger le trafique en provenance des 2 domaines developpeur-wordpress.paris* & sebastienserre.com vers le répertoire contenant votre installation de WordPress.
A ce stade, vos 2 domaines vont pointer sur le site principal sur votre WordPress. Il va falloir maintenant mapper les domaines avec les sites.
Vous pouvez suivre le tutoriel « Faire du Domain Mapping avec WordPress multisite » pour paramétrer WordPress comme il faut.
*developpeur-wordpress.paris ne réponds pas aux règles d’utilisation de la marque WordPress, il ne sera utilisé que pour ce tutoriel et a titre d’exemple.
Il existe beaucoup de solutions pour intégrer une carte Google dans vos contenus WordPress. Aujourd’hui nous allons voir une solution basée sur un champs Gmap d’Advanced Custom Field (ACF). Cet article est une traduction du tutoriel d’Alicia Ramirez.
Ce tutoriel est basé sur l’utilisation de l’excellentissime extension Advanced Custom Field car elle est utilisée sur la totalité de mes développement et très simple à mettre en oeuvre.
Étape 0: Obtenir une clé API Google Map.
Avant de pouvoir utiliser Google Maps, il va falloir obtenir une clé API Google Map. Vous pouvez utiliser l’API Standard qui autorise 25000 affichage de carte par jour) ou si vous avez beaucoup de trafic, vous devrez opter pour un plan Premium.
Étape 1: Ajouter du CSS
Coller ce code dans votre feuille de style (style.css) ou ailleurs si vous le pensez plus approprié.
Étape 2: Création d’un script Javascript initialisant la carte.
Copiez / collez ce code dans un fichier gmap.js que vous pourrez stocker dans un dossier de votre thème. Pour l’exemple nous prendrons library/js.
Étape 3: Chargement des scripts par WordPress
Maintenant, il vous faut charger les scripts précédemment créé lors du chargement de WordPress. Vous pourriez coller les liens dans le header.php de votre thème… mais ce n’est vraiment pas une bonne pratique WordPress. Nous allons utiliser la fonction dédiée de WordPress : wp_enqueue_script()
Dans votre functions.php de votre thème, ajoutez le code suivant:
Aux lignes 2 et 10, remplacez « XXXX » par votre clé API Google Map.
À la ligne 3, assurez vous d’avoir saisi le chemin vers le script JS créé à l’étape 2.
Étape 3 – Bonus
Si vous ne voulez charger votre carte que sur certaines page, par exemple la page « Contact », vous pouvez modifier le code comme ceci:
Étape 4: Affichage de la carte
Dans votre template de page, là ou vous désirez voir la carte, insérez ce code dans la Boucle:
Assurez vous de bien modifier le nom du champs ACF Google Map. Ici on a utilisé « location » dans get_field('location');.
Conclusion:
Vous venez d’ajouter une carte Gmap dans votre thème WordPress sans utiliser aucune extension. Notez que vous pouvez vous passer d’ACF si vous désirez saisir « en dur » les coordonnées GPS d’un lieu. Il vous suffira d’adapter les valeurs de data-lat et data-lng
Gravity Form est une extension WordPress Premium (entendre payante) offrant la possibilité de construire des formulaires de toutes sortes assez poussés.
Sur un projet, j’ai récemment eu besoin d’alimenter de façon automatique des champs d’un formulaire et je me suis dis que j’e pouvais aussi vous en faire profiter…
Récupérer des informations via les paramètres d’une URL
Si vous êtes développeur, ceci ne devrait pas éveiller de questions, si ce n’est pas le cas vous vous demandez sûrement ce que sont ces paramètres d’URL… vous en avez pourtant déjà tous croisé!
Imaginons une URL du type: https://thivinfo.com/blog/tutoriels/pre-remplir-un-formulaire-gravity-form-avec-des-parametres-durl/ … rien de transcendant hein … maintenant en ajoutant les paramètres:
?checkbox=1&texte=mon%20test
on va se retrouver se retrouver avec cette URL https://thivinfo.com/formulaire-pour-tutoriel-gf-et-parametre/?checkbox=1&texte=mon%20test
Et là avouez que le résultat est sympa et que dans bien des cas, ca pourrait être très pratique!
Comment faire ?
Tout d’abord, il va vous falloir acheter Gravity Form puis créer un formulaire.
Pour un champs simple type « texte »
Prenons exemple de mon champ texte, en back-office vous devrez obtenir ceci:
Dans l’onglet « Avancé », cochez « Remplir dynamiquement les champs ». Ceci fera apparaître un champs ou vous pourrez nommez votre paramètre. Ici dans un élan d’inspiration je l’ai nommé « Texte » ce qui me permettra d’avoir le paramètre
texte=
Pour un champs avancés de type « checkbox »
Pour ce type de champs, c’est un peu plus compliqué car il ne s’agit pas de simplement remplir un champs de type Input, il faut définir quelle choix cocher…
Pour ce faire, nous allons dans l’onglet « Général » cocher la case « afficher les valeurs » ce qui aura pour effet d’ajouter un champs par choix afin de pouvoir sélectionner facilement l’une ou l’autre des possibilités du champs « Checkbox ».
Il faut bien entendu définir un paramètre « checkbox » dans l’onglet avancé de la boite de Dialogue Gravity Form pour réaliser l’exemple d’URL cité en début d’article.
Précision pour les non-développeu⋅r⋅se⋅s
Il n’y a pas d’ordre à respecter dans les paramètres à mettre dans l’URL. Le 1er paramètre est toujours un ? et les suivants sont séparés par des esperluettes (&).
Et sinon?
Et sinon… vous n’êtes pas obligé de passer les paramètres dans un lien… vous pouvez aussi les placer dans le code-court (shortcode) de Gravity Form à la manière de
Contact
Précision pour les développeu⋅r⋅se⋅s
Cette technique est très pratique si vous la couplez à la fonction WordPress add_query_arg() qui vous permettra de construire dynamiquement des URL contenant des paramètres. Si vous désirez en savoir plus sur cette fonction, je vous invite à lire l’article très complet de Maxime Culea