What the hook?

COQUARD Cyrille

18/04/2024

Introduction

COQUARD Cyrille

18/04/2024

COQUARD Cyrille

Ingénieur logiciel

À WP Media depuis 2 ans

18/04/2024

Volonté de s'améliorer

COQUARD Cyrille

  • Difficulté à trouver des resources
  • Difficulté trouver des exemples concrets

18/04/2024

Un hook, c'est quoi?

  • Moyen de changer le comportement WordPress
  • 2 types de hooks:
    • Actions: Ajouter logique suite à un événement
    • Filtres: Lire ou modifier une valeur

Introduction

18/04/2024

COQUARD Cyrille

Comment utiliser un hook ?

  • 2 façons:
    • Client: Ajouter de la logique à un hook existant
    • Developeur: Créer un nouveau hook

Introduction

18/04/2024

COQUARD Cyrille

Comment utiliser une action ?

Introduction

<?php

do_action('my_action', 'parameter1', 10, true);
<?php 
add_action('action', function(
				$parameter,
                $second
                ) {
	// my logic
}, 10 ,2);

Developpeur

Client

18/04/2024

COQUARD Cyrille

Comment utiliser un filtre ?

Developpeur

Introduction

<?php

$my_value = apply_filters(
	'my_filter',
    10
);
<?php

add_filter(
	'filter',
    function($parameter) {
    	return $parameter;
    }
);

Client

18/04/2024

COQUARD Cyrille

Comment utiliser un hook ?

Utiliser != bien les utiliser

Introduction

18/04/2024

COQUARD Cyrille

Bonne pratiques:

  1. Utilisateur:

    1. Decisions not options
    2. Keep it simple stupid
  2. Developpeur:
    1. Not alone
    2. Dispatcher
    3. Subscriber

Introduction

18/04/2024

COQUARD Cyrille

Client

COQUARD Cyrille

18/04/2024

Decisions not options

COQUARD Cyrille

18/04/2024

COQUARD Cyrille

Devoir de simplicité

  • Choix non technique

  • Visible de tous

Options

  • Choix avancé

  • Visible que des experts

Filtres

18/04/2024

COQUARD Cyrille

Constantes magiques

C'est quoi ?

Une valeur définie sans ou avec peu d'explications

<?php

$hour = 60 * 60;

$delay = 10 * $hour;

18/04/2024

COQUARD Cyrille

Comment les éviter?

Valeur variable

Utilisation d'un filtre

<?php

$delay = apply_filters(
   'my_plugin_cron_mails',
   10 * HOUR
);

Valeur fixe

Utilisation d'une constante

<?php

const MINUTE = 60;

const HOUR = 60 * MINUTE;

18/04/2024

Constantes magiques:

  • Donner une valeur par default
  • Ne pas imposer son choix

Toujours penser le module comme extensible par l'intermediaire d'actions et de filtres

 

18/04/2024

COQUARD Cyrille

Keep It Simple Stupid

COQUARD Cyrille

18/04/2024

Abstraire la complexité

  • Garder simples les interactions:
    • Parametres
    • Resultats

Garder les filtres et actions simples

18/04/2024

COQUARD Cyrille

Garder un typage basique

  • Types de base
  • Tableaux

Garder les filtres et actions simples

18/04/2024

COQUARD Cyrille

Documenter les hooks

  • Votre code n'est pas le centre du monde
  • Chercher dans le code casse le concept d'abstraction

Garder les filtres et actions simples

18/04/2024

COQUARD Cyrille

Documenter les hooks

  • Liste sous forme d'un YAML
  • Generation de la doc sous la forme d'une page web

Garder les filtres et actions simples

18/04/2024

COQUARD Cyrille

Developpeur

COQUARD Cyrille

18/04/2024

Not alone

COQUARD Cyrille

18/04/2024

Maison vs appartement

Quelle difference?

Maison

  • Seul
  • Fait ce qu'on veux

Appartement

  • Voisins
  • Règles communes

18/04/2024

COQUARD Cyrille

Maison vs appartement

Quelle difference?

SAAS

  • Seul
  • Fait ce qu'on veux

WordPress

  • Autres plugins
  • Règles communes

18/04/2024

COQUARD Cyrille

Maison vs appartement

Règles communes

Erreurs

  • Pas d'exceptions
  • Logger les erreurs

Compartimentation

  • Utilisation de namespaces
  • Utilisation de prefixes

18/04/2024

COQUARD Cyrille

Maison vs appartement

Ne pas entacher WordPress

  • Plus stable
  • Chaque plugin a son impact

18/04/2024

COQUARD Cyrille

Separate concerns

COQUARD Cyrille

18/04/2024

Problème

  • Changer une classe peut aboutir à une erreur n'importe où
  • Perte de temps car il faut tout tester
  • Logique principale et secondaire sont melangées

COQUARD Cyrille

18/04/2024

Une solution

Pour WordPress

par WordPress

18/04/2024

COQUARD Cyrille

Le hook

Logique feature isolée

  • Une classe n'est utilisée que dans sa feature
  • Les options sont prefixées par le nom de la feature

Hooks entre les features

  • Pour lancer une action basée sur une autre feature: action
  • Pour récuperer une information basée sur une autre feature: filtre

18/04/2024

COQUARD Cyrille

Isolation

  • Division des logiques
  • Reduction des chances de bugs
  • Faciliter les tests

Le hook

18/04/2024

COQUARD Cyrille

Dispatcher

COQUARD Cyrille

18/04/2024

Problèmes

  • Reference fonction do_action et apply_filters partout dans le code

  • Impossible de savoir retour d'un filtre

18/04/2024

COQUARD Cyrille

COQUARD Cyrille

18/04/2024

Dispatcher

  • Ne pas répéter la logique de validation des filtres
  • Externaliser l'enregistrement des hooks
  • Controler la valeur de retour des filtres

COQUARD Cyrille

18/04/2024

Subscriber

COQUARD Cyrille

18/04/2024

Problème

  • Répétiton logique de l'enregistrement
  • Simuler enregistrement des hooks chaque test
  • Couplé fortement à l'API WordPress

COQUARD Cyrille

18/04/2024

COQUARD Cyrille

  • Subscriber contient la logique business
  • Subscriber envoie événements
  • Event Manager enregistre les événements

 

18/04/2024

COQUARD Cyrille

18/04/2024

Event manager

  • Ne pas répéter la logique l'enregistrement des hooks
  • Externaliser l'enregistrement des hooks
  • Faciliter les tests

COQUARD Cyrille

18/04/2024

Launchpad

Framework regroupant toutes les bonnes pratiques de WP Rocket

https://github.com/wp-launchpad/launchpad

COQUARD Cyrille

18/04/2024

Avez-vous des Questions?

18/04/2024

COQUARD Cyrille

Copy of deck

By Cyrille Coquard

Copy of deck

  • 66