web-dev-qa-db-fra.com

Le meilleur moyen de modifier un plugin sans crochets ni fonctions enfichables?

Je dois apporter des modifications à certaines fonctions dans un plugin qui n'ont pas de hooks et ne sont pas connectables.

Mon idée était de regrouper les fonctions que je modifie dans une if ( ! function_exists()) et de transférer mes modifications dans un plugin séparé. Ensuite, chaque fois que je dois mettre à jour le plug-in, je rajoute simplement l'encapsuleur if ( ! function_exists()).

S'il vous plaît, dites-moi pourquoi c'est une mauvaise idée et ce que je devrais faire à la place.

1
dallen

Il semble que le plugin que vous utilisez soit très important pour vous et/ou votre client, et le plugin lui-même est très probablement mis à jour régulièrement avec un support approprié.

Je contacterais certainement l'auteur et discuterais des modifications possibles du plugin. Si un changement est un changement constructif et apporterait un certain degré d'utilité au plug-in, je ne vois aucune raison pour que l'auteur n'implémente pas vos changements dans les versions/mises à jour à venir.

En premier lieu, si votre modification dépasse le cadre du plug-in actuel, vous pouvez suggérer à l'auteur et lui demander d'ajouter simplement un filtre approprié, le cas échéant, dans les versions/mises à jour futures.

Mais oui, je commencerais par l'auteur du plugin pour ce type de support avant de chercher d'autres solutions

2
Pieter Goosen

Je ne peux même pas penser à un exemple de plug-in qui n'utilise pas de filtres. Presque tous les plugins utilisent des options pour stocker des données et utilisent donc les points d'ancrage associés aux options.

votre plugin utilise probablement de nombreuses actions et filtres, ils ne sont pas sur son code de haut niveau, mais cela ne vous empêche pas de les utiliser pour changer le comportement du plugin.

Une autre possibilité consiste à utiliser la mise en mémoire tampon de sortie pour manipuler la sortie s'il n'existe aucun autre moyen d'influencer sa génération.

0
Mark Kaplun

si le plugin que vous voulez manipuler existe en tant que classe, vous pourrez peut-être l'écraser avec la fonction __call dans votre classe (étend l'original). cela vous empêche de modifier des fichiers; vous devrez peut-être réécrire votre plugin pour suivre le rythme de l'autre plugin, mais je pense que l'extension de la classe du plugin est votre meilleure option, compte tenu de la négligence de l'auteur.

0
Caleb