Les filtres et les actions WordPress,
ça vous parle ?
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 ressources avancées
- Difficulté trouver des exemples concrets
18/04/2024
Idée derrière le talk
- Partager connaissances internes
- Aider la communauté à progresser
COQUARD Cyrille
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
- Developpeur: 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('my_action', function(
$parameter,
$second
) {
// my logic
}, 10 ,2);
Developpeur
Client
18/04/2024
COQUARD Cyrille
Comment utiliser la priorité ?
Introduction
18/04/2024
COQUARD Cyrille
- 3 cas:
- Negative: Quasi sur premier
- <10: Executer avant
- 10: Valeur par default
- >10: Executer après
Comment utiliser un filtre ?
Developpeur
Introduction
<?php
$my_value = apply_filters(
'my_filter',
10
);
<?php
add_filter(
'my_filter',
function($parameter) {
return $parameter;
}
);
Client
18/04/2024
COQUARD Cyrille
Comment utiliser un filtre ?
Introduction
18/04/2024
COQUARD Cyrille
Comment utiliser un hook ?
Utiliser != bien les utiliser
Introduction
18/04/2024
COQUARD Cyrille
Bonne pratiques:
-
Client:
- Decisions not options
- Keep it simple stupid
-
Developpeur:
- Not alone
- Dispatcher
- 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_delay',
10 * HOUR
);
Valeur fixe
Utilisation d'une constante
<?php
const MINUTE = 60;
const HOUR = 60 * MINUTE;
18/04/2024
Constantes magiques:
- Débutant: Donner une valeur par default
- Expert: Ne pas imposer son choix
18/04/2024
COQUARD Cyrille
Filtres:
Toujours penser le plugin comme solution standardisée
18/04/2024
COQUARD Cyrille
Toujours penser le plugin comme extensible par l'intermediaire d'actions et de filtres
18/04/2024
COQUARD Cyrille
Keep It Simple Stupid
COQUARD Cyrille
18/04/2024
Le seul expert de votre plugin,
c'est vous!
Garder les filtres et actions simples
18/04/2024
COQUARD Cyrille
Abstraire la complexité
Garder simples les interactions:
- Parametres simples
- Resultats simples
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
Génération 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
Compartimentation
- Classe: Utilisation de namespace
- Fonction: Utilisation de namespace
- Hook: Utilisation de prefixe
- Constante: Utilisation de prefixe
- Option: Utilisation de prefixe
18/04/2024
COQUARD Cyrille
Maison vs appartement
Pas d'exceptions:
- Crash WordPress
- Problèmes autres logiques
Echouer silencieusement
- Retourner une valeur
- Logger les erreurs
18/04/2024
COQUARD Cyrille
Maison vs appartement
Ne pas entacher WordPress
Plus stable
Chaque plugin à 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
Action: pour lancer une action basée sur une autre feature
Filtre: pour récuperer une information basée sur une autre feature
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
- 196