So bearbeiten Sie ein WordPress-Plugin, ohne den Aktualisierungsprozess zu unterbrechen

8

Ich möchte einige zusätzliche Features / Funktionen mit dem bereits verfügbaren WordPress-Plugin hinzufügen.

Ist es möglich, meine Anpassung beim Aktualisieren des Plugins zu übernehmen?

Aadi
quelle

Antworten:

8

Wahrscheinlich nicht.

Der empfohlene Weg, um Ihre Verbesserungen in das Plugin zu integrieren, ist: Senden Sie Ihre Fixes an den Entwickler und bitten Sie ihn, sie mit dem Original zusammenzuführen. Wenn es sich bei Ihren Änderungen eher um persönliche Anpassungen handelt, geschieht dies nicht.

Wenn das Plugin in einem strengen OOP-Stil geschrieben ist, können Sie ein zweites Plugin erstellen, das bei Bedarf nur die Klassen des Originals erweitert (eine Art untergeordnetes Plugin). Leider sehen die meisten Plugin-Entwickler diese Notwendigkeit nicht und schreiben ihren Code nicht entsprechend. Beachten Sie das Problem mit der Ladereihenfolge .

Wir könnten Ihnen besser helfen, wenn Sie beschreiben würden, welches Plugin Sie erweitern möchten und was genau Sie ändern möchten.

Fuxia
quelle
5

Leider hängt es völlig vom Plugin ab (oder genauer vom Plugin-Autor!). Wenn der Autor proaktiv nachgedacht und das Plugin so erstellt hat, dass es erweiterbar ist, können Sie Ihr EIGENES Plugin erstellen, das hinzufügt auf die Funktionalität im vorhandenen Plugin.

Notieren Sie sich, worauf Toscho hingewiesen hat - dass Ihre Plugin-Reihenfolge wichtig ist (der Link ist wieder hier ).

Haken

Die häufigste Möglichkeit, ein Plugin erweiterbar zu machen, besteht darin, Hooks (Aktions- und Filter-Hooks) hinzuzufügen, die Sie dann mit Ihrem eigenen Plugin nutzen können. Wenn Sie einen guten Code-Editor haben (im Moment rocke ich auf NetBeans ), sollten Sie die Plugin-Quelldateien nach: do_actionund durchsuchen apply_filters. Wenn der Plugin-Autor diese Hooks bereitgestellt hat, ist dies eine sehr bequeme und einfache Möglichkeit, die Standardeinstellungen zu überschreiben oder Ihren eigenen Code einzufügen.

Steckbare Funktionen

Wenn der Plugin-Autor versiert ist, aber den globalen Namespace für die Plugin-Funktionen verwendet, hat er möglicherweise die Funktionen des Plugins in if ( function_exists() )bedingte Anweisungen eingeschlossen. Damit dies zu Ihrem Vorteil funktioniert, müssen Sie sicherstellen, dass Ihr Plugin zuerst geladen wird (was eine Herausforderung sein kann). Alles, was Sie tun müssen, ist, Ihre Funktion mit genau demselben Namen innerhalb genau demselben Namespace zu deklarieren, und dann ersetzt Ihre Funktion die vom Plugin verwendete.

Erweiterung

Wenn der Plugin-Autor ein guter OOP-Codierer ist, kann er den Plugin-Code so detailliert schreiben, dass er erweitert werden kann (da er, wie der GOF sagen würde, definitiv wegen Änderungen geschlossen ist). Suchen Sie nach viel Granularität in der Plugin-Klasse - dh nach Methoden, die kleine, hochspezifische Aufgaben ausführen -, die in Ihrer eigenen Klasse überschrieben werden können und die Klasse des Plugins erweitern. Wie Toscho erwähnt, muss die Klasse natürlich so aufgebaut sein, dass sie überschrieben werden kann und sich ihre Standardimplementierung nicht vollständig selbst aufruft.

Gabel oder Patch

Wenn der Plugin-Autor gitHub verwendet oder die Quelle auf andere Weise geöffnet hat, können Sie dem Autor entweder einen Patch mit den vorgeschlagenen Änderungen übermitteln (am besten ändern Sie das Plugin, um es flexibler oder leistungsfähiger zu machen, ohne es zu entfernen oder Ändern vorhandener Features oder Funktionen), oder Sie können einfach die Quelle herunterladen, den Plugin-Header so ändern, dass er nicht mehr aktualisiert wird, wenn der ursprüngliche Autor ein Update veröffentlicht, und Ihre aktualisierte Version vorzugsweise dem Autor oder als senden seine eigene Entität direkt zu WordPress . Beachten Sie, dass Sie, wenn Sie das Plugin an WP senden, eine Site dafür benötigen und bereit sein sollten, es zu unterstützen, wenn andere es herunterladen.

Tom Auger
quelle
1

Ich weiß, dass es eine sehr alte Frage ist, aber ich denke, ich habe die Lösung gefunden ...

Ich habe ein Plugin, in dem einer der Entwickler meines Kunden es auf das Limit von Verzeichnissen und Unterverzeichnissen geändert hat. Wenn aktualisiert, werden die Dateien gelöscht und das Plugin stürzt ab. Um das ursprüngliche Plugin von allen Kernaktualisierungen unabhängig zu machen, habe ich die geänderten Dateien und Ordner in ein separates Plugin in einem Verzeichnis mit dem Namen verschoben extension.

Verwenden Sie den Code unter https://gist.github.com/wpsmith/af206df2cf6a38e4e2f0

Ich habe die von Tarvis Smith definierte Klasse hinzugefügt WPS_Extend_Plugin.phpund in mein Plugin aufgenommen. Mit der WPS_Extend_PluginKlasse habe ich das Verzeichnis der erweiterten Dateien / Ordner auf den Zielordner verwiesen extension. Es gibt noch keinen Fehler, aber ich bin mir nicht sicher, ob dies der richtige Weg ist, um ein Plugin zu erweitern oder nicht!

// Require WPS_Extend_Plugin class
require_once( 'classes/WPS_Extend_Plugin.php' );

// Extend Sitepress Multilingual CMS
new WPS_Extend_Plugin( 'sitepress-multilingual-cms/sitepress.php', __FILE__, '3.9.0', 'CHERRY' );
// Extend AddThis
new WPS_Extend_Plugin( 'extension', __DIR__, '0.1', 'CHERRY' );
Hassan Alvi
quelle
0

Ich verstehe, dass diese Frage wirklich alt ist, aber ich hatte das Gefühl, dass dies jemandem helfen könnte.

Wenn Sie der Meinung sind, dass die Änderungen der Community helfen würden, senden Sie sie bitte an den Entwickler. Wenn die Änderungen jedoch nur für Ihre Installation gelten, können Sie Folgendes weiterlesen.

Ich hatte dieses Problem mit der Übertragung von Änderungen an der aktualisierten Version eines Themas. Wir haben einen rekursiven Unterschied von old_versionzu gemacht modified_old_versionund dann den Patch, den er erstellt hat, mit dem Patch- Tool auf die neue Version des Themas angewendet .

Die Patch-Tools erstellen Dateien mit Änderungen, die nicht automatisch übernommen werden konnten. Wir hatten einige davon und konnten diese Änderungen leicht identifizieren und manuell vornehmen.

Während Sie Änderungen vornehmen, müssen Sie sicherstellen, dass Sie den Abstand für die gesamte Datei nicht mithilfe von Editorfunktionen wie automatischem Einzug usw. ändern. Nehmen Sie also nur Änderungen vor, wenn dies erforderlich ist. Dies würde den Prozess der Übertragung der Änderungen später nur zeitaufwändiger machen.

Prathamesh Gharat
quelle