Il ne vous semble-t-il pas que certains plugins WordPress ont de la chance ? WooCommerce, Easy Digit Download, Gravity Forms : chacun de ces plugins est propulsé par toute une entreprise, avec des dizaines d’extensions tierces et de plus en plus de fonctionnalités ajouté par ces dernières qui se greffent au potentiel du plugin. Pendant ce temps, la plupart des autres plugins n’arrivent pas à progresser.

Comment un seul plugin peut-il devenir la base d’un écosystème technologique en plein essor ? Il y a beaucoup de réponses: être le premier sur le marché, créer un excellent produit, avoir le sens du marketing, et tout le reste. Mais aujourd’hui, nous allons nous concentrer sur une partie importante de la réponse technique à savoir : l’extensibilité, par le biais du système de crochets de WordPress.

Aujourd’hui, nous allons utiliser un exemple de plugin WordPress pour couvrir les deux fonctions clés qui confèrent le statut d’extensibilité à un plugin à savoir : apply_filters() et do_action().

Extensions: des extensions pour des plugins

Il est donc clair que lorsque nous parlons « d’extensions », nous faisons référence à des plugins qui sont fait pour d’autres. Prenons un exemple: « Stripe for WooCommerce ».

Cette extension ne fait rien si vous n’avez pas déjà WooCommerce. Si vous installez WooCommerce, ensuite achetez et installez « Stripe For WooCommerce » comme un plugin séparé, et il élargira les fonctionnalités de WooCommerce afin que vous puissiez commencer à accepter les paiements via la passerelle de paiement Stripe.

Donc, vous avez un plugin qui améliore un autre plugin d’une manière spécifique. C’est une extension. Ce sont des adverbes de l’écosystème WordPress.

Comment fonctionnent les fonctions : apply_filters() et do_action() ?

La question suivante : comment WooCommerce arrive-t-il à voir ses fonctionnalités étendues ? Après tout, il est facile d’imaginer d’écrire un plugin eCommerce qui « fonctionne uniquement avec quelques passerelles de paiement ». Ensuite, si vous voulez vraiment Stripe vous devrez modifier complètement WooCommerce, et probablement finir par créer votre propre outil appelé StripeCommerce, qui soit devient un concurrent de WooCommerce ou vit simplement sur le site de l’un de vos clients qui pourrait se permettre de payer une assistance personnalisée.

C’est un gâchis à contempler, mais heureusement WooCommerce fait quelque chose de beaucoup mieux. Il fait un l’usage de deux fonctions: apply_filters() et do_action(). Ces deux fonctions vous permettent de créer des crochets sur WordPress, et c’est une partie fondamentale du système Crochets de WordPress en général.

apply_filters() et do_action() Une différence plutôt simple :

  • apply_filters() vous permet de connecter des filtres à des fonctions.
  • do_action() vous permet de connecter des actions à des fonctions.

Regardons un exemple pour voir comment ils fonctionnent.

Exemple d’utilisation de crochets WooPress.

Pour notre exemple, nous allons utiliser un plugin « Citation du jour », plus une extension qui modifie ce plugin de manière spécifique. Pour suivre et voir le complet du code, télécharger les plugins comme un fichier ZIP https://wpshout.com/media/2016/10/plugins.zip.

Le plugin original

Ce plugin utilise l’API exposée par une bibliothèque externe de citations, et stocker la citation résultant en tant que données passagère de WordPress qui se rafraîchit toutes les 24 heures. Revenez à cet article à tout temps et vous verrez une citation aléatoire de ce jour sur le thème de la «vie», ce qui devrait être suffisamment large.

l’extension du plugin

Comme nous le savons, le problème avec la plupart des citations est qu’elles ne sont pas dites par « Carl Sagan ». Notre extension corrige ce problème, en utilisant un certain nombre d’outils:

  • Un grand en-tête indiquant la date d’aujourd’hui et que la citation est par Carl Sagan,
  • Certains remplacements de mots spécifiques pour transformer une citation en ce que Carl Sagan aurait pu dire
  • Les auteurs des citations originales sont changés et les citations sont maintenant correctement attribuées à Carl Sagan.

Voici le plugin et l’extension, en action:

citation-en-action

Le code

Afin que cela se produise, deux étapes sont nécessaires :

Le plugin original définit des crochets – des crochets d’action et crochets de filtre -permettant à code externe de modifier ou ajouter son propre code à des points clés. Le plugin utilise apply_filters() et do_action() pour y parvenir.

L’extension définit les fonctions crochues sur l’action et les filtres -Qui modifient le plugin original d’une manière nécessaire.

Code clé dans le plugin Original

La partie du code la plus importante pour nous est ce que nous faisons une fois que nous avons obtenu nos données de l’API. Ces données sont disponibles en tant que tableau avec deux éléments: text : le texte de la citation; et author : la personne qui a dit la citation. Notre code se présentera donc comme suit:

add_shortcode( 'extensible_plugin_demo', 'bpc_output_extensible_plugin' );
function bpc_output_extensible_plugin() {
 ob_start();

 // Crochet avant l'affichage!
 do_action( 'bpc_before_get_qod_text' );

 $qod_data = bpc_get_qod_data();
 if( is_array( $qod_data ) ) {
 echo '<blockquote><small>';

 $qod_text = $qod_data[ 'text' ];
 $qod_author = $qod_data[ 'author' ];

 // Filtrer le contenu!
 $qod_text = apply_filters( 'bpc_qod_text', $qod_text );
 $qod_author = apply_filters( 'bpc_qod_author', $qod_author );
 
 echo $qod_text;
 echo '<br><br>';
 echo $qod_author;
 echo '<small></blockquote>';
 }

 // Action hook after rest of output!
 do_action( 'bpc_after_get_qod_text' );

 return ob_get_clean();
}

Code Clé dans l’extension

L’extension ne se compose de rien d’autre que des actions et des filtres pour modifier le plugin original. Voici le code de l’extension:

add_filter( 'bpc_qod_text', 'bpc_filter_qod_text' );
// Filter: remplacer des mots spécifique
function bpc_filter_qod_text( $text ) {
    $text = str_replace( 
        array( ' I ', ' me ', ' the ', ' is ', ' am ', ' are ' ),
        array( ' I, a descendent of savannah-dwelling hominids that somehow evolved an astounding capacity for self-reflection, ', ' the cooled-off stellar matter I call "me" ', ' the trillions of atoms that make up the ', ' seems, without the mind-boggling perspective of quantum physics, to be ', ' cannot, due to the Heisenberg Uncertainty Principle, be determined not to be ', ' appear to our best scientific instruments to be ' ),
        $text
    );
    return $text;
}

// Filter: barré le texte qui précède le nom de l'auteur et ajouter Carl Sagan à la suite
add_filter( 'bpc_qod_author', 'wpshout_filter_qod_author' );
function wpshout_filter_qod_author( $text ) {
    $text = '<strike>' . $text . '</strike> Carl Sagan';
    return $text;
}

// Action: Ajouter un titre
add_action( 'bpc_before_get_qod_text', 'bpc_set_up_quote' );
function wpshout_set_up_quote() {
    echo '<h4>Carl Sagan Quote of the Day for ' . date( 'F j, Y') . ':</h4>';
}

// Action: Ajouter une image
add_action( 'bpc_after_get_qod_text', 'bpc_add_carl_boom' );
function bpc_add_carl_boom() {

    echo '<div><img class="aligncenter" src="' . plugin_dir_url( __FILE__ ) . 'carl_sagan_mind_blown.gif"></div>';
}

Comme vous pouvez le voir, ce sont des utilisations tout à fait standard de « add_action() » et « add_filter() » et les deux fonctions sont accrochées sur des crochets que nous avons appelé « bpc_qod_text ».

Le résultat final est que notre plugin est maintenant extensible : un second développeur peut regarder modifier le plugin et dire «Je souhaite que Carl Sagan dise », et le faire tout en utilisant le plugin d’origine comme base un peu comme les thèmes parents et enfants sur WordPress.

C’est une telle astuce qui rend un plugin comme WooCommerce, très populaire, en vous permettant d’y ajouter de nouvelles fonctionnalités.

C’est tout pour ce tutoriel. J’espère que vous comprendrez mieux les différent cas d’utilisation des filtres et des actions WordPress.