Plugins einbinden


12

Ich arbeite an einem Plugin, das idealerweise Dinge tun kann, wenn ein Benutzer etwas über ein anderes Plugin tut .

Ich kann diesen Plugins benutzerdefinierte Hooks hinzufügen, aber das funktioniert natürlich nicht, wenn ich mein Plugin verteilen möchte. Gibt es eine gute Möglichkeit, Hooks von meinem eigenen Plugin zu den Plugins anderer Leute hinzuzufügen? Ist die einzige echte Lösung, um den Autor zu bitten, benutzerdefinierte Hooks aufzunehmen, damit andere Entwickler von ihrer Arbeit aufbauen können?

Beispiel: Ich möchte etwas in meinem Plugin tun, wenn jemand einen Artikel retweetet. Wenn es einen benutzerdefinierten Hook in dem beliebten Retweet-Plugin geben würde, an den ich mich anschließen und von dem ich abfeuern könnte, wäre das großartig. Da dies nicht der Fall ist, kann ich das Plugin ändern, um es einzuschließen, aber das funktioniert nur für meine Kopie, und ich möchte nicht versuchen, das weiterzugeben.

Müssen wir nur versuchen, bessere Plugin-Entwickler zu sein, damit wir alle gut zusammen spielen können?


1
Gute Frage!
MikeSchinkel

"Ist es die einzige echte Lösung, den Autor aufzufordern, benutzerdefinierte Hooks einzuschließen, damit andere Entwickler von ihrer Arbeit aufbauen können?" In den meisten Fällen ja. Es gibt bestimmte Situationen, in denen Sie es schaffen, sich indirekt in das Plugin einzuklinken, aber dies ist normalerweise nicht der Fall. Bitten Sie sie, ihre Plugins so zu schreiben, als würden sie für den WordPress-Kern schreiben - fügen Sie einen Filter / eine Aktion ein, wo immer Sie ihn benötigen.
Viper007Bond

1
Tipp: Dokumentieren Sie die Hooks, die Ihr Plugin bereitstellt, damit andere Plugin-Autoren damit interagieren können.
Hakre

Antworten:


6

@ Ryan Elkins:

Ich denke, die Antwort hängt davon ab, wie wichtig jeder Anwendungsfall für Sie ist. In einigen Fällen ist es etwas, das Sie schnell und schmutzig benötigen, in anderen Fällen ist es möglicherweise ein wichtigerer Anwendungsfall. Hier sind die beiden Dinge, die mir einfallen:

Suchen Sie in WordPress Core nach alternativen Hooks

Wenn es mal etwas schnelles und schmutziges ist, können Sie andere Downstream-Hooks vom Core verwenden, um das zu ändern, was Sie benötigen, oder sowohl Upstream- als auch Downstream-Hooks mithilfe von ob_start()/ ob_end_clean()(siehe Antwort von @Todd Perkins auf " Umgang mit großer HTML-Ausgabe über Plugin-Code "). für ein Codebeispiel.)

Um die Hooks aufzuspüren, können Sie das Instrument Hooks-Plugin verwenden, das ich gestern veröffentlicht habe, um die Hooks zu finden, die Sie möglicherweise verwenden können.

Senden Sie einen Patch mit Ihrem gewünschten Hook an den Plugin-Entwickler

Wenn Ihr Anwendungsfall für Sie oder die Community wichtiger ist, würde ich empfehlen, den Hook, den Sie benötigen, zum Plugin hinzuzufügen. Testen Sie es dann gut, um sicherzustellen, dass es wirklich Ihren Anwendungsfall anspricht. Anschließend können Sie dem Plug-in-Entwickler einen Patch in der Hoffnung übermitteln, dass er ihn anwenden wird. Auf diese Weise machen Sie es ihnen so einfach wie möglich, indem Sie ihnen getesteten Code geben, und Sie können den Anwendungsfall selbst durcharbeiten, um sicherzustellen, dass er wirklich das ist, was Sie brauchen. Ich kann Ihnen nicht sagen, wie oft ich dachte, ich brauche einen bestimmten Hook, nur um zu finden, nachdem ich versucht hatte, einen zu implementieren. Ich brauchte einen Hook, der anders war, als ich es mir ursprünglich vorgestellt hatte.

Wenn Sie nicht mit dem Erstellen eines Patches vertraut sind, finden Sie hier einen guten Artikel zum Patchen des WordPress-Kerns, für den das Patchen von Plugins am besten geeignet ist, und für den, für den dies nicht der Fall ist:

Hoffe das hilft?

PS Eine Sache finde ich ein bisschen enttäuschend und dass Ihre Frage Adressen ist der Prozentsatz der Plugins, die nur für Endbenutzer gedacht sind, dh die keine eigenen Hooks haben. Stellen Sie sich vor, WordPress wäre wie die meisten Plugins gestaltet? Es wäre unflexibel und eine sehr Nischenlösung.

Vielleicht wäre es anders, wenn WordPress die Möglichkeit hätte, Plugins automatisch zu installieren, von denen andere Plugins abhängen? In der Regel muss ich einen Großteil der Funktionen, die ich benötige, von Grund auf neu schreiben, da die Clients bestimmte Anforderungen und die verfügbaren Plugins erfüllen möchten, während 90% nicht die Flexibilität bieten, die verbleibenden 10% zu aktualisieren.

Ich wünsche mir wirklich, dass diejenigen, die die WordPress-Community anführen, einen Weg finden, um sicherzustellen, dass Plugins für das Befolgen von Best Practices (wie das Hinzufügen von Hooks für andere Entwickler) belohnt werden, ähnlich wie gute Antworten auf einer StackExchange-Site belohnt werden.


2

Brauchen wir nur zu versuchen und zu so besser Plugin - Entwickler werden , dass wir alle spielen schön zusammen?

Für den Anfang ja.

Ist die einzige echte Lösung, um den Autor zu bitten, benutzerdefinierte Hooks aufzunehmen, damit andere Entwickler von ihrer Arbeit aufbauen können?

Das wäre eine gute Lösung.

Sie können auch das andere Plugin kopieren und einfach Änderungen hinzufügen, was jedoch umständlicher wäre.


2

Ich denke, Sie beantworten Ihre Frage in der Frage, so dass es etwas rhetorisch wird.

Offensichtlich handelt es sich um ein ähnliches System wie das von Google mit Android und dem Intent-System. Eine Anwendung kann Aktionen veröffentlichen, die sie für andere Anwendungen ausführen kann, die sich dann in sie einhängen und Daten zurückgeben und her. Persönlich denke ich, dass es etwas ist, das wir als gute Entwickler anstreben müssen - wir verwenden WordPress, weil es bereits großartig ist, großartig genug, um die Entscheidung zu treffen, ob wir es verwenden oder ein ähnliches internes Produkt in den meisten Fällen ziemlich einfach entwickeln. Das Plugin-Repository selbst ist wieder dasselbe, hauptsächlich für Endbenutzer und Entwickler. Warum ein Twitter-Plugin entwickeln, wenn es ein perfektes gibt?

Das gleiche "Warum Duplikate entwickeln" steht hier im Mittelpunkt Ihrer Frage. Das Android Intent-System ermöglicht es Anwendungen, bereits erstellte Funktionen zu nutzen und Daten zwischen ihnen zu übertragen. Dies ist beliebt und wird häufig verwendet, da es so stark ausgelastet ist. Es gibt ein ähnliches System, das bereits in WordPress implementiert ist, das jedoch nur sehr selten über die häufig verwendeten Hooks im Kerncode hinaus verwendet wird.

Es wäre für die Community von Vorteil, wenn mehr Hooks in benutzerdefinierten Plugins vorhanden wären, aber wie Sie sagen, gibt es keine einfache Möglichkeit, Hooks hinzuzufügen, wenn / wo Sie sie benötigen.

In Bezug auf das Twitter-Plugin, in das Sie sich einbinden möchten, senden Sie dem Autor eine E-Mail. Ich bin sicher, er würde diese gerne für Sie hinzufügen.

Wenn es einen Ort gibt, von dem Sie glauben, dass er ein guter Ort ist, um einen Haken in Ihr Plugin zu setzen, tun Sie es und dokumentieren Sie es gut. Wenn mehr Leute anfangen, Hooks in Plugins zu stecken, oder es einen allgemeinen Vorstoß dazu gibt, wird es irgendwann passieren.

Also, um deine letzte Frage zu beantworten:

Müssen wir nur versuchen, bessere Plugin-Entwickler zu sein, damit wir alle gut zusammen spielen können?

Ja.


Bearbeiten: Ich habe etwas mehr über die eigentliche Frage nachgedacht und über die beste Methode zum Implementieren von Hooks. Können Sie keine Aktion hinzufügen, die ausgeführt wird, wenn die bestimmte Funktion, die Sie für das Plugin ausführen möchten, vorhanden ist?


Das würde funktionieren, aber was wäre, wenn die Funktion eines anderen Plugins den gleichen Namen hätte?
Arlen Beiler

Hoppla, vielleicht nicht, denn Sie müssen wissen, was und von wem retweetet wird. Die Überprüfung der Funktion ist eine Laufzeitlösung. Wir benötigen eine Echtzeitlösung, die ausgeführt wird, wenn die betreffende Funktion aufgerufen wird oder Daten zurückgibt.
Arlen Beiler

@Arlen - Angenommen, Sie möchten eine eigene Funktion erstellen, die prüft, ob die jeweilige Funktion vorhanden ist. Es würde nach 'plugins_loaded' ausgeführt, und wenn es dort ist, wird ein Boolescher Wert festgelegt, der die Funktionen aktiviert. Es hängt stark davon ab, dass sich der Code nicht ändert, aber ich kann nicht sehen, warum es nicht funktioniert.
Niemand

0

definiere eine Funktion:

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

jetzt kannst du diesen haken anhaken: add_action('my_footer', 'example_function', 1);# weitere informationen siehe auf meinem post .


nicht => jetzt, das eigene => das. Richtig?
Arlen Beiler

Ich verstehe, wie man benutzerdefinierte Hooks hinzufügt - die Frage ist, wie man das Plugin eines anderen abhakt, idealerweise so, dass das Plugin nicht direkt geändert werden muss.
Ryan Elkins

@Arlen: vielen dank, sorry für mein schlechtes englisch @Ryan: es ist nicht möglich, wenn das plugin keinen hook hat; Sie können jedoch überprüfen, ob die Funktion oder Klasse ersetzt wurde, wenn der Autor dies in seinem Plugin anfordert. Es ist aber möglich, aktive Plugins anzufordern und in WP früher als das andere Plugin zu haken und seine Funktion zu ersetzen.
Bueltge
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.