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:

  1. Client:

    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_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

  • 127