WordCamp Vancouver 2016

Faites-le en code !

Un guide pour créer un plugin de structure de site personnalisé dans WordPress.

Présenté par :

Peter Hebert

Rex Rana Design and Development Ltd.

Qu'est-ce que la structure du site ?

  • Types d'articles
  • Métaboxes et champs
  • Taxonomie
  • Menus
  • Structure des liens permanents

Pourquoi un plugin personnalisé ?

  • La fonctionnalité doit résider dans le code, pas dans la base de données
  • Thèmes pour la présentation, plugins pour la fonctionnalité
  • Gérer le code dans un système de contrôle de version (git, svn)
  • Portabilité du code / déploiement
    • environnements: développement / tranition (staging) / production
    • réutilisation pour plusieurs sites web / différents clients

Notre exemple de plugin

Nous allons créer un répertoire de films (comme IMDb)

  • Custom Post Type : Film
  • Taxonomie personnalisée : Genre
  • Métabox : Données Film
  • Champs : Date de sortie, Durée, Réalisateur

github.com/rexrana/my-custom-structure

Fonctionnalité de base de WordPress

  • Pas facile à utiliser, vous devez faire la plupart du travail
    • Fonctions CRUD (créer, lire, mettre à jour et supprimer)
    • Fonctions de rappel (callback) avec HTML pour afficher les champs dans le tableau de bord de l'administration
    • Assainissement / validation des entrées
    • nombres aléatoires (nonces)
  • C'est beaucoup à retenir - le temps pourrait être mieux utilisé

Heureusement, il existe une meilleure solution !

De nombreux outils existent pour simplifier la création de la structure du site :

  • Plugins (Advanced Custom Fields, Pods, Meta Box, Toolset)
    • La plupart ont une fonctionnalité d'exportation vers le code
  • Bibliothèques pour développeurs : CMB2, Carbon Fields
  • Générateurs de code : GenerateWP, commande WP-CLI scaffold

Plugins de structure

Créez votre structure dans le tableau de bord de l'administrateur.

Optionnellement, exporter en code

  • Advanced Custom Fields
  • Pods framework
  • Meta Box
  • Toolset

Advanced Custom Fields (ACF)

Gratuit : wordpress.org/plugins/advanced-custom-fields

Pro : advancedcustomfields.com

  • plugin le plus populaire pour la création de champs personnalisés
  • Version gratuite est trés limité - nécessite la version Pro (abonnement) pour des fonctionnalités avancées:
    • ajouter plus de types de champs
    • la répétition des groupes de champs
    • création des blocs Gutenberg
    • exportation vers code - formats JSON et PHP

Pods

pods.io

  • Peut créer des types de contenu et des champs
  • support de l'éditeur de blocs (Gutenberg) et de l'éditeur classique
  • créer des relations avancées
  • inclut une interface de programmation d'application (API REST) et des commandes WP-CLI
  • Prêt pour la traduction - intégrations avec WPML, Polylang

Meta Box

metabox.io

  • léger, rapide et simple à utiliser
  • support multisite
  • plus de 40 types de champs
  • inclut des générateurs en ligne pour les champs, les types de posts, les taxonomies et les blocs

Toolset

toolset.com

  • support robuste de l'éditeur de blocs
  • bibliothèque de blocs dynamiques
  • types d'articles personnalisés, taxonomies et champs
  • créer des modèles de page avec l'éditeur de blocs
  • création de formulaires
  • accès : gérer des rôles et privilèges.
  • cartes : Google Maps ou Azure Maps

Bibliothèques pour développeurs

  • Déclarer des métaboxes et champs dans le code en avec l'API
  • suivre les changements avec git à l'intérieur de votre plugin
  • include() pour lier la bibliothèque en PHP, ou utiliser Composer pour la déclarer comme dépendance du plugin.

CMB2

Bibliothèque pour les développeurs - github.com/WebDevStudios/CMB2

  • Boîte à outils pour construire des métaboxes, des champs personnalisés et des formulaires
  • Déclarez les métaboxes et les champs en utilisant des tableaux de paramètres
  • 35 types de champs inclus, avec API pour déclarer les vôtres
  • Utiliser sur les types d'articles, les pages d'options, les profils d'utilisateurs
    • même sur le front-end de votre site

Carbon Fields

Bibliothèque pour les développeurs - carbonfields.net

  • facile pour les développeurs de déclarer des champs personnalisés
  • riche en fonctionnalités (pas de version "pro" payante)
  • champs personnalisés pour les types d'articles, les pages d'options, les taxonomies, les utilisateurs, les commentaires, les menus de navigation et les widgets.
  • groupes de champs répétables
  • définir des blocs Gutenberg dynamiques sans JavaScript.

Générateurs de code

  • formulaires en ligne ou outils en ligne de commande
  • génère le code
  • copier / coller vers un fichier PHP dans le plugin

GenerateWP

Générateur de code - generatewp.com

  • Assistants basés sur des formulaires pour générer du code conforme aux normes de codage de WordPress
  • Sélectionnez un outil, remplissez le formulaire, générez le code.
  • Copiez le code prêt à l'emploi directement dans votre plugin.

Commandewp scaffold (WP-CLI)

Générateur de code - wp-cli.org/commands/scaffold/

  • Commande pour l'interface en ligne de commande de WordPress (WP-CLI)
  • Génère du code de démarrage pour les thèmes, les plugins, les tests unitaires, les types de messages et la taxonomie.
  • Limité - ne peut pas spécifier de paramètres avancés, ne donne qu'une configuration minimale avec des valeurs par défaut.
  • Fournit un point de départ rapide

Exemples WP-CLI scaffold

Exécuter des commandes à partir du répertoire de base du site

Type d'article : Film

wp scaffold post-type film --label=Film --textdomain=structure \
--dashicon=editor-video --plugin=my-custom-structure

Taxonomie : Genre

wp scaffold taxonomy genre --post_types=film --label=Genre \
--textdomain=structure --plugin=my-custom-structure

Mise en place de l'ensemble

  • Si vous utilisez des plugins basés sur l'interface graphique, installez le plugin de la manière habituelle.
  • Bibliothèques de développement : il faut généralement faire un PHP include(), ou déclarer une dépendance Composer pour votre plugin.
  • Créez des fichiers PHP séparés pour chacun des éléments suivants : Post Types, Taxonomie, Métaboxes/Champs
    • inclure ces fichiers dans le fichier PHP principal du plugin
    • cela rend les éléments plus faciles à trouver, à commenter ou à supprimer.

Inclure les bibliothèques du développeur

CMB2 :

if( file_exists( dirname(__FILE__).'/lib/cmb2/init.php' ) ) {
                  require_once( 'lib/cmb2/init.php' ) ;
                }

Carbon Fields (à l'aide de Composer) :

composer require htmlburger/carbon-fields

Assurez-vous d'inclure l'autoloader PSR-4 de Composer dans le plugin

require_once (__DIR__ . '/vendor/autoload.php') ;

Includes pour déclarer la structure

// Types d'articles et taxonomies.
require_once('post-types/film.php') ;
require_once('taxonomies/genre.php') ;

// Métaboxes et champs.

/* utilisation des fonctionnalités de base de WordPress */
require_once('inc/wp-fields.php') ;

/* utilisant ACF */
require_once('inc/acf-fields.php') ;

/* utilisant CMB2 */
require_once('inc/cmb2-metaboxes.php') ;

Merci!

Article (avec tous les liens référencés et les diapositives) :

https://peterhebert.com/wcyvr2016-fr

Suivre

Rex Rana   rexrana.ca   rexrana  rex-rana

Peter Hebert   peterhebert.com

peterhebert   peterhebert   peterhebert   peterhebert

@peterhebert@fosstodon.org

Rex Rana