Wie verhindere ich, dass Plug-in-Updates die Benutzer-Änderungen verfälschen?

Wie kann ich verhindern, dass meine Plugin-Updates die Bearbeitungen und Dateierweiterungen in einem bestimmten Unterverzeichnis meines Plugins überlisten?

Ich habe ein Syntax-Highlighting-Plugin geschrieben, das GeSHi verwendet. Ein Unterordner des Plugins ist GeSHi selbst. Viele Benutzer möchten die Sprachdateien in GeSHi anpassen / bearbeiten.

Speziell hier ist die Verzeichnisstruktur:

  • wp-contente / plugins / mein-plugin /
    • mehrere Unterverzeichnisse usw
  • wp-content / plugins / mein-plugin / geshi / geshi /
    • Benutzer werden diesem Verzeichnis Dateien hinzufügen
    • Sie bearbeiten auch Dateien in diesem Verzeichnis
    • Wenn sie ihre neuen Updates abholen, möchte ich ihre Änderungen nicht löschen

Was ist der beste Weg, dies zu lösen?

Vielen Dank!


Hier ist, was ich dachte, aber ich kann nicht implementieren:

  1. Auf dem Update-Plugin Aktion Hook (?) Eine temporäre Kopie der Dateien machen, die ich beibehalten möchte.
  2. Holen Sie sich die neue Version entpacken und installieren Sie wie gewohnt
  3. Kopieren Sie die beibehaltenen Dateien von der temporären Kopie in die neue Version
  4. Entfernen Sie die temporäre Kopie

Im Idealfall würde dies alles mit Dateien geschehen, aber im schlimmsten Fall könnte ich Daten in der DB speichern.

Problem ist, dass ich keine Haken für Plugin-Updates sehe. Ich schaute hier und hier .

Solutions Collecting From Web of "Wie verhindere ich, dass Plug-in-Updates die Benutzer-Änderungen verfälschen?"

Erlauben Sie Ihren Benutzern nicht, Dateien hinzuzufügen oder zu bearbeiten.

Verwenden Sie stattdessen Dinge wie do_action und apply_filters wie der WordPress-core.

Ich kenne GeSHi nicht, aber ich würde vorschlagen, dass Sie herausfinden, wo in der class die für die Sprache erforderliche Datei geladen wird. Ändern Sie den Dateipfad so, dass er etwa so aussieht:

 $file_path = apply_filters( 'yourplugin_name_geshi_path', $file_path, $lanuage ); 

Dann könnten sich Benutzer einhaken und den Dateipfad entsprechend ändern …

 < ?php add_filter( 'yourplugin_name_geshi_path', 'wpse27248_path_modify', 10, 2 ); function wpse27248_path_modify( $path, $language ) { if( 'some_language' = $language ) { $path = '/some/new/path'; } return $path; } 

Am besten ist es wahrscheinlich, eine Unterklasse von GeSHi zu erstellen, die Methoden zu ändern, die Sie ändern müssen (wie vorgeschlagen) und diese class für Ihr Plugin zu verwenden. Wenn GeSHi aktualisiert wird, können Sie die neue Version hinzufügen, ohne Ihre Änderungen zu verlieren.

Sie müssen sich nicht darum kümmern, Benutzerdateien oder etwas anderes zu überschreiben. Benutzer, die eine neue Sprache in der Bibliothek benötigen, können einfach ein sehr einfaches Plugin erstellen.

Im Allgemeinen wird von WordPress empfohlen, den Upload-Ordner zu verwenden. Jedes Plugin-Update überschreibt immer das, was sich im Plugin-Ordner befindet.

Ich habe meine Plugins erstellt einen Unterordner unter Uploads, die alle nutzbaren Sachen speichert. Auf diese Weise ist es sowohl vor wp als auch vor Plugin- / Theme-Updates sicher.

Soweit Sprachen, überprüft mein Plugin, ob es eine angepasste Sprachdatei in uploads / subfolder gibt. Wenn nicht, lädt es aus dem Plug-in-Sprachordner die neueste Standardsprachversion.

Warum nicht eine Software zur Versionskontrolle verwenden und jeden zu seinem eigenen Zweig beitragen lassen? Zu einem bestimmten Zeitpunkt könnten Sie diese Zweige einfach in Ihr Haupt-Plugin-Repo falten.