it-swarm.com.de

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

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

Kann ich meine Anpassung während der Aktualisierung des Plugins übernehmen?

6
Aadi

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 nur die Klassen vom Original nach Bedarf erweitert (eine Art untergeordnetes Plugin). Leider sehen die meisten Plugin-Entwickler diese Notwendigkeit nicht und schreiben ihren Code nicht entsprechend. Seien Sie sich des Ladereihenfolgeproblems bewusst .

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

8
fuxia

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

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

Haken

Die gebräuchlichste 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 Quelldateien des Plugins nach do_action und apply_filters durchsuchen. 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 die Funktionen des Plugins möglicherweise in if ( function_exists() )-Bedingungsanweisungen 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 dem exakt gleichen Namen innerhalb des exakt gleichen Namensraums zu deklarieren, und dann wird Ihre Funktion die vom Plugin verwendete ersetzen.

Erweiterung

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

Gabel oder Patch

Wenn der Autor des Plugins gitHub verwendet oder die Quelle auf andere Weise geöffnet hat, können Sie entweder einen Patch mit den vorgeschlagenen Änderungen an den Autor senden (am besten das Plugin ändern, um es flexibler zu machen, oder leistungsstark, ohne vorhandene Features oder Funktionen zu entfernen oder zu ändern), oder Sie können einfach den Quellcode 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 an die senden Autor, oder als eigene Entität direkt zu WordPress . Beachten Sie, dass Sie, wenn Sie das Plugin bei WP einreichen, eine Site dafür benötigen und bereit sein sollten, diese zu unterstützen, wenn andere sie herunterladen.

5
Tom Auger

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 die folgenden Informationen lesen.

Ich hatte dieses Problem bezüglich der Übertragung von Änderungen an der aktualisierten Version eines Themas. Wir haben ein rekursives diff von old_version auf modified_old_version erstellt und dann den Patch, den es erstellt hat, mit dem Tool patch auf die neue Version des Themas angewendet.

Die Patch-Tools erstellen Dateien mit Änderungen, die nicht automatisch angewendet 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 mit Editorfunktionen wie dem automatischen Einrücken usw. ändern. Nehmen Sie Änderungen also nur vor, wenn dies erforderlich ist. Dies würde nur dazu führen, dass die Änderungen später zeitaufwendiger werden.

0

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

Ich habe ein Plugin, in dem einer der Entwickler meines Kunden es auf die maximale Anzahl von Verzeichnissen und Unterverzeichnissen angepasst hat. Wenn es aktualisiert wird, werden die Dateien gelöscht und das Plugin stürzt ab. Um das Original-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 extension verschoben.

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

Ich habe die von Tarvis Smith definierte Klasse in WPS_Extend_Plugin.php hinzugefügt und in mein Plugin aufgenommen. Mit der Klasse WPS_Extend_Plugin habe ich das Verzeichnis für erweiterte Dateien/Ordner auf den Zielordner extension verwiesen. Es gibt noch keinen Fehler, aber ich bin mir nicht sicher, ob dies der richtige Weg ist, 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' );
0
Hassan Alvi