Thème WordPress : ajouter une fonction spécifique à une extension

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 ?

1
Poster un Commentaire

avatar
  S’abonner  
le plus récent le plus ancien le plus populaire
Notifier de
damir
Invité
damir

Bonjour
Je débute sous wordpress et je suis tombé sur votre page
en cherchant comment ouvrir une page wordpress à partir d’un bouton
se trouvant dans une case d’un tableau d’activités géré par un plugin.
Mais je sèche lamentablement depuis plusieurs jours.

Mon button est de type html
inscription

et en lisant votre article j’ai pensé mettre la fonction appellée

add_action( ‘xxxxx’, ‘form_inscription’ );
function form_inscription(){
alert(« inscription »);
}

dans functions.php du thème (enfant)

Ma question est de savoir si c’est la bonne méthode et quoi mettre dans le 1er argument de add_action.

Cordialement

Damir