Connexion aux plugins

12

Je travaille sur un plugin qui serait idéalement capable de faire des choses lorsqu'un utilisateur fait quelque chose via un autre plugin.

Je peux ajouter des hooks personnalisés dans ces plugins mais évidemment cela ne fonctionnerait pas bien quand je veux distribuer mon plugin. Existe-t-il un bon moyen d'ajouter des crochets aux plugins d'autres personnes à partir de mon propre plugin? La seule vraie solution consiste-t-elle à demander à l'auteur d'inclure des crochets personnalisés afin que d'autres développeurs puissent s'appuyer sur leur travail?

Exemple: je veux faire quelque chose dans mon plugin quand quelqu'un retweete un article. S'il y avait un crochet personnalisé dans le plugin Retweet populaire auquel je pouvais me connecter et tirer, ce serait génial. Il n'y en a pas, donc je peux modifier leur plugin pour l'inclure, mais cela ne fonctionne que pour ma copie, et je ne veux pas essayer de le redistribuer.

Avons-nous simplement besoin d'être de meilleurs développeurs de plugins pour que nous puissions tous jouer bien ensemble?

Ryan Elkins
la source
1
Grande question!
MikeSchinkel
"Est-ce la seule vraie solution pour demander à l'auteur d'inclure des crochets personnalisés afin que d'autres développeurs puissent s'appuyer sur leur travail?" Dans la plupart des cas, oui. Il y a certaines situations où vous pouvez réussir à vous connecter indirectement à leur plugin, mais ce n'est généralement pas le cas. Dites-leur d'écrire leurs plugins comme s'ils écrivaient pour le noyau WordPress - incluez un filtre / action partout où vous en avez besoin.
Viper007Bond
1
Astuce: documentez les crochets que votre plugin fournit afin que d'autres auteurs de plugins puissent interagir avec lui.
hakre

Réponses:

6

@Ryan Elkins:

Je suppose que la réponse dépend de la façon dont vous importez chaque cas d'utilisation. Dans certains cas, ce serait quelque chose dont vous avez besoin rapidement et sale, dans d'autres, ce pourrait être un cas d'utilisation plus important. Voici les deux choses qui me viennent à l'esprit:

Recherchez des crochets alternatifs dans WordPress Core

Si c'est quelque chose de rapide et sale à certains moments, vous pouvez utiliser d'autres hooks en aval du noyau pour modifier ce dont vous avez besoin, ou les hooks en amont et en aval via l'utilisation de ob_start()/ ob_end_clean()(voir la réponse de @Todd Perkins à " Traiter les grandes sorties HTML via le code du plugin " pour un exemple de code.)

Pour retrouver les crochets que vous pourriez utiliser, consultez le plugin Instrument Hooks que j'ai publié hier pour vous aider à trouver les crochets que vous pouvez potentiellement utiliser.

Soumettez un patch avec votre crochet souhaité au développeur de plugins

Si votre cas d'utilisation est plus important pour vous ou la communauté, je vous recommande d'aller de l'avant et d'ajouter le hook dont vous avez besoin au plugin. Ensuite, testez-le bien pour vous assurer qu'il répond vraiment à votre cas d'utilisation, après quoi vous pouvez soumettre un patch au développeur du plugin dans l'espoir qu'il l'appliquera. De cette façon, vous leur rendez le plus simple possible en leur donnant du code testé et vous travaillez vous-même dans le cas d'utilisation pour vous assurer que c'est vraiment ce dont vous avez besoin. Je ne peux pas vous dire combien de fois je pensais que j'avais besoin d'un certain crochet seulement pour trouver après avoir essayé de l'implémenter j'avais besoin d'un crochet mais qui était différent de ce que j'avais envisagé au départ.

Si vous n'êtes pas familier avec la création d'un correctif, voici un bon article sur le correctif du noyau WordPress pour lequel la plupart s'applique aux correctifs des plugins et pour ce qui ne le fait pas, il est à espérer qu'il sera évident de savoir quoi faire:

J'espère que cela t'aides?

PS Une chose que je trouve un peu décevante et que votre question porte sur le pourcentage de plugins qui sont conçus uniquement pour les utilisateurs finaux, c'est-à-dire qui n'ont pas leurs propres crochets. Imaginez si WordPress était conçu comme la plupart des plugins? Ce serait inflexible et une solution très niche.

Peut-être que les choses seraient différentes si WordPress devait avoir la possibilité d'installer automatiquement des plugins dont dépendaient les autres plugins? En l'état actuel des choses, je dois généralement écrire une grande partie des fonctionnalités dont j'ai besoin, car les clients veulent les choses d'une certaine manière et les plugins disponibles, tandis que 90% ne me permettent pas de mettre à jour les 10% restants.

Je souhaite vraiment que ceux qui dirigent la communauté WordPress identifient un moyen de garantir que les plugins sont récompensés pour les meilleures pratiques suivantes (telles que l'ajout de crochets pour d'autres développeurs), tout comme les bonnes réponses sont récompensées sur un site StackExchange.

MikeSchinkel
la source
2

Avons-nous juste besoin d'essayer et d' être mieux les développeurs de plugin afin que nous puissions tous bien jouer ensemble?

Pour commencer, oui.

La seule vraie solution consiste-t-elle à demander à l'auteur d'inclure des crochets personnalisés afin que d'autres développeurs puissent s'appuyer sur leur travail?

Ce serait une bonne solution.

Vous pouvez également copier l'autre plug-in et simplement ajouter des modifications, mais ce serait plus compliqué.

Arlen Beiler
la source
2

Je pense que vous répondez à votre question dans la question, de sorte que cela devienne quelque peu rhétorique.

Évidemment, vous parlez d'un système similaire à celui que Google encourage avec Android et le système Intent, qu'une application peut publier des actions qu'elle est capable de faire au nom d'autres applications, qui peuvent ensuite s'y connecter et transmettre des données et en avant. Personnellement, je pense que c'est quelque chose vers lequel nous devons nous diriger en tant que bons développeurs - nous utilisons WordPress parce qu'il est déjà génial, assez génial pour prendre la décision de l'utiliser ou de développer un produit interne similaire assez facilement dans la plupart des cas. Le référentiel de plugins lui-même est à nouveau la même chose, principalement en tant qu'utilisateur final + développeur - pourquoi développer un plugin Twitter quand il en existe un parfaitement bon.

Le même «pourquoi développer des doublons» est au cœur de votre question ici. Le système Android Intent permet aux applications d'utiliser des fonctions déjà créées et de transmettre des données entre elles, ce qui est populaire et souvent utilisé, car il est tellement sollicité. Il existe un système similaire déjà implémenté dans WordPress, mais est très rarement utilisé au-delà des crochets présents dans le code de base, qui sont beaucoup utilisés.

Il serait avantageux pour la communauté si plus de hooks dans les plugins personnalisés étaient présents, mais comme vous le dites, il n'y a pas de moyen facile d'ajouter des hooks quand / où vous en avez besoin.

En ce qui concerne le plugin Twitter auquel vous souhaitez vous connecter, envoyez un e-mail à l'auteur, je suis sûr qu'il serait heureux de les ajouter pour vous.

S'il y a un endroit que vous pensez être un bon endroit pour mettre un crochet dans votre plugin, faites-le et documentez-le bien. Si plus de personnes commencent à mettre des hooks dans les plugins, ou s'il y a une pression générale pour le faire, cela arrivera finalement.

Donc, pour répondre à votre dernière question:

Avons-nous simplement besoin d'être de meilleurs développeurs de plugins pour que nous puissions tous jouer bien ensemble?

Oui.


Edit: J'ai réfléchi davantage à la question réelle et à la meilleure façon d'implémenter les hooks, ne pourriez-vous pas ajouter une action qui s'exécuterait si la fonction particulière que vous essayez d'exécuter du plugin était présente?

personne
la source
Cela fonctionnerait, mais que se passerait-il si une fonction de plugin différente avait le même nom?
Arlen Beiler
Oups, peut-être que non, car il faut savoir ce qui est retweeté et par qui. La vérification de la fonction est une solution d'exécution, ce dont nous avons besoin est une solution en temps réel, qui s'exécute lorsque la fonction en question est appelée ou renvoie des données.
Arlen Beiler
@Arlen - Supposons que vous deviez créer votre propre fonction qui vérifie si la fonction particulière existe. Il serait exécuté après 'plugins_loaded', et s'il est là, il définit un booléen qui active les fonctionnalités. Cela dépend fortement du fait que le code ne change pas, mais je ne vois pas pourquoi cela ne fonctionnerait pas?
personne
0

définir une fonction:

function my_footer() {
    do_action('my_footer');
}

maintenant vous pouvez accrocher ce crochet: add_action('my_footer', 'example_function', 1);# plus d'informations voir sur mon post .

bueltge
la source
pas => maintenant, ce propre => ceci. Correct?
Arlen Beiler
Je comprends comment ajouter des hooks personnalisés - la question est de savoir comment déconnecter le plugin de quelqu'un d'autre, idéalement d'une manière qui ne nécessite pas de modification directe de leur plugin.
Ryan Elkins
@Arlen: merci beaucoup, désolé pour mon mauvais anglais @Ryan: ce n'est pas possible, quand on n'a pas le plugin accroché; mais vous pouvez vérifier pour remplacer la fonction ou la classe, lorsque l'auteur le demande dans son plugin. Mais il est possible de demander des plugins actifs et d'accrocher plus tôt dans WP comme l'autre plugin et de remplacer sa fonction.
bueltge