Supposons que nous soyons contents d’une extension utilisée par notre site à un détail près. Nous pouvons attendre que le développeur publie une mise à jour qui règle miraculeusement ce détail. Nous pouvons aussi créer notre propre fonction dans notre thème (enfant en principe). Mais dans ce cas, où mettre cette fonction ? Comment régler les conditions qui la déclencheront ou non ?

Le problème

Je voudrais utiliser l’extension Related Posts for WordPress, qui permet d’ajouter des articles en relation à la fin de chaque article et dans la barre latérale. Mais je veux que l’algorithme qui “décide” qu’un article est en lien avec un autre, prenne en compte le fait que ces deux articles sont dans la même catégorie. La documentation de l’extension est très bien faite et le développeur explique quelle fonction rédiger pour qu’il n’y ait de liens entre articles que s’ils sont dans la même catégorie.

Je sais donc quoi mettre dans ma fonction.

Mais où mettre cette fonction ?

Que se passe-t-il si cette fonction se déclenche alors que l’extension est désactivée ? Ou si elle a été mise à jour et que les éléments auxquels il est fait référence n’existent plus ?

Où placer cette fonction ?

J’ai plein de possibilités :

  1. modifier l’extension elle même ;
  2. placer la fonction dans mon thème ;
  3. Créer une extension “add-on” et l’activer ;

La première devrait être prohibée : si je modifie l’extension elle même, la prochaine fois qu’elle sera mise à jour je perdrai toutes mes modifications. Et si je ne déclenche pas les mises à jour, je prends des risques pour la sécurité du site.

La troisième est intéressante. Surtout si j’ai d’importantes modifications à réaliser.

La deuxième me semble la plus appropriée ici car je n’ai qu’une petite fonction à ajouter.

Par contre, je ne dois pas l’ajouter directement dans le thème utilisé pour les mêmes raisons qui prohibent le choix n°1 : je ne pourrai plus faire de mises à jour.

Je vais donc ajouter la fonction dans le thème enfant que j’utilise.

Ajouter la fonction dans un thème enfant

Je place la fonction dans functions.php de mon thème enfant. Le développeur l’a appelée rp4wp_force_same_category , je lui laisse ce même nom.

Le développeur dit qu’elle doit être utilisé par la commande suivante :

add_filter( 'rp4wp_get_related_posts_sql', 'rp4wp_force_same_category', 11, 3 );

Mais quand est-ce que cette action doit être réalisée ?

  1. uniquement si l’extension Related Posts for WordPress est activée ;
  2. au moment de l’initialisation “admin” avec le “hook” admin_init

En pseudo code, il faut donc :

 

Quand admin_init,

si l'extension est activée

	filtrer rp4wp_get_related_posts_sql  avec la fonction créée ;

sinon, ne rien faire

Mise en oeuvre concrète

Au début de functions.php du thème enfant, placer :

add_action( 'admin_init', 'clea_child_filter_related_posts' );

Créer la fonction clea_child_filter_related_posts :

function clea_child_filter_related_posts() {
	
	if ( is_plugin_active( 'related-posts-for-wp/related-posts-for-wp.php' ) ) {
		add_filter( 'rp4wp_get_related_posts_sql', 'rp4wp_force_same_category', 11, 3 );
	} 

}

Evidemment, s’assurer qu’on a copié la fonction que l’on souhaite déclencher, rp4wp_force_same_category , dans functions.php

Conclusion

Cette activité nous conduit à mieux comprendre les filtres WordPress, les actions WordPress et la fonction WordPress is_plugin_active . Intéressant, non ?

0 0 vote
Article Rating
1
0
Would love your thoughts, please comment.x
()
x