it-swarm.dev

Plugins einbinden

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 dies funktioniert offensichtlich 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 einzuschließen, 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 loslassen 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 zusammen Nice spielen können?

12
Ryan Elkins

@ 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 nach alternativen Hooks in WordPress Core

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

Um die Hooks aufzuspüren, können Sie das Plugin Instrument Hooks verwenden, das ich gestern gepostet habe, um die potenziell verwendbaren Hooks zu finden.

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?

P.S. Eine Sache finde ich ein bisschen enttäuschend und dass Ihre Fragenadressen der Prozentsatz der Plugins sind, die nur für Endbenutzer gedacht sind, d. H. 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.

6
MikeSchinkel

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

Für den Anfang ja.

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

Das wäre eine gute Lösung.

Sie könnten auch das andere Plugin kopieren und einfach Änderungen hinzufügen, obwohl dies mehr Aufwand bedeuten würde.

2
Arlen Beiler

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 Push 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 zusammen Nice spielen können?

Ja.


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

2
nobody

definiere eine Funktion:

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

jetzt können Sie diesen Haken anhängen: add_action('my_footer', 'example_function', 1); # Weitere Informationen finden Sie auf my post .

0
bueltge