Sidebar
ein-/ausblenden

WordPress Plugin Daten automatisch deinstallieren

Plugin für WordPress SEO

Anzeige

Plugins löschen
Ab der Version 2.7 von WordPress wird es die Möglichkeit geben, dass man ein Plugin aus dem Backend heraus löschen kann, siehe Version 2.7 Info. Um das Löschen der Daten auch in der Datenbank zu realisieren, müssen die Autoren der Plugins einige Voraussetzungen schaffen. Damit der eine oder andere diese Funktion in sein Plugin aufnimmt oder für die Zukunft im Hinterkopf abspeichert, zeige ich, wie man dies realisiert.

Wer schon im Vorfeld eine Uninstall-Funktion im Plugin hatte, der muss nicht sonderlich viel umstellen. Für Interessierende, die Funktionen zum Deinstallieren finden sich in wp-admin/includes/plugin.php

  1. is_uninstallable_plugin($plugin)
  2. uninstall_plugin($plugin)

und der zugehörige Hook in wp-includes/plugin.php

  1. register_uninstall_hook($file, $callback)

Um nun das Plugin mit der Möglichkeit zu bereichern, können zwei Möglichkeiten genutzt werden.

  1. Eine Datei mit der Bezeichnunguninstall.php muss im Plugin vorliegen.
  2. Der Hook zur Deinstallation register_uninstall_hook muss angesprochen werden.

Bis zu Version 2.7 von WordPress konnte man ebenfalls die Daten aus der Datenbank löschen, allerdings nur wenn man das Plugin deaktiviert (Hook register_deactivation_hook()) oder mit Hilfe eines Formulars. Sollte dabei eine Funktion genutzt worden sein, dann kann diese auch weiterhin dafür einspringen. Lediglich das Ansprechen hat sich geändert.
Um auch andere Versionen von WordPress zu unterstützen, empfiehlt es sich die Konstante WP_UNINSTALL_PLUGIN abzufragen, denn diese steht erst ab Version 2.7 zu diesem Zweck bereit. Alternativ kann man auch den Hook register_uninstall_hook() nutzen, da dieser zur Funktion via Hook notwendig ist. Beide Möglichkeiten habe ich im folgenden Beispielen hinterlegt.

Plugins löschen

Die folgenden Funktion soll beispielhaft in einem Plugin stehen und löscht den Eintrag example aus der Datenbank Tabelle options.


/**
 * Delete options in database
 */
function example_deinstall() {

	delete_option('example');
}

via Datei uninstall.php

Die einfachste Möglichkeit ist das Anlegen der Datei unistall.php mit den entsprechenden Einträgen zum Löschen von Daten in der Tabelle options.


delete_option('example');

Um ein Fehlverhalten in älteren Versionen von WordPress vorzubeugen, empfiehlt sich hier der Einsatz der Konstante. Ist diese nicht definiert, dann findet im Beispiel ein einfacher Abruch statt.


if ( !defined('WP_UNINSTALL_PLUGIN') ) {
    exit();
}
delete_option('example');

via Hook register_uninstall_hook()

Alternativ kann man die Deinstallation auch per Hook registrieren, so dass man nicht auf die Datei angewiesen ist und man optional einfacher eine Möglichkeit der Deinstallation in das Plugin integrieren kann. Dazu steht der Hook register_uninstall_hook() zur Verfügung.


 /**
 * Check for hook
 */
if ( function_exists('register_uninstall_hook') )
	register_uninstall_hook(__FILE__, 'example_deinstall');

 /**
 * Delete options in database
 */
function example_deinstall() {

	delete_option('example');
}

Die Möglichkeit, dass man direkt im Backend von WordPress Plugins löschen kann, macht es sicher dem Nutzer ein wenig leichter, seine Installation von unnötigen Daten zu befreien. Nun müssen die Autoren von Plugins diese Lösung noch unterstützen und die Tabell options wird es sicher danken.

17 Kommentare zu „WordPress Plugin Daten automatisch deinstallieren“

  1. 1
    Kommentar von nastorseriessix

    Da kommen ja immer mehr und mehr, kleine und nette bzw nützliche Funktionen hinzu. Wenn das so weitergeht, dann ist WP spätestens mit v2.8 ein richtiges kleines CMS! ;)

  2. 2
    Kommentar von Sergej Müller

    Danke für deine Anleitung.

    Das wpSEO Plugin besitzt bereits die Unterstützung für automatische Deinstallation. Jetzt muss nur noch WP 2.7 final erscheinen.

  3. 3
    Kommentar von Frank Bültge

    @Sergej Müller: Warum hast du mir dann nicht das Suchen erspart und Infos gegeben, hat mich wieder einiges an Zeit gekostet die Hooks zu analysieren ;-) . Schön, dass du als Autor die Möglichkeiten nutzt, obwohl wohl das Löschen deines Plugins bei den meisten Nutzern nicht in Frage kommt, da sie ja Linzenzgebühren entrichtet haben.
    Ich würde ja gern mal wissen, ob sich die Umstellung lohnt oder ob die Konkurrenz zu stark ist, dass viele Nutzer die freien Plugins nutzen?

  4. 4
    Kommentar von Sergej Müller

    Ich konnte ja nicht ahnen, dass du demnächst darüber schreibst ;) Übrigens habe ich die Lösung via Hook implementiert, da wpSEO in Form einer PHP-Datei daherkommt.

    Die Umstellung hat sich auf alle Fälle gelohnt - auch für den Nutzer. Dazu vielleicht mehr im Interview bei SEO Scene: http://www.seo-scene.de/tools/wpseo-interview-mit-sergej-mueller-161.html

  5. 5
    Kommentar von Frank Bültge

    @Sergej Müller: Danke für den Link und die Antwort, das Interview werde ich gleich lesen.

  6. 6
    Kommentar von Frank Bültge

    @Sergej Müller: Nettes Interview und eine ausführlichere Antwort auf meine Frage, sehr schön. Vielleicht sollte ich es mir mal ansehen, denn ich komme bisher ohne ein SEO-Plugin aus.
    Das Problem Freizeit und Familie, geschweige denn andere Hobbys kann ich sehr gut verstehen. Allerdings haben meine Plugins keinen Download-Counter, bis auf die, die bei wp.org liegen, so dass ich das nicht einschätzen könnte; aber 100 000 sind es sicher nicht.

  7. 7
    Kommentar von Sergej Müller

    Abend Frank. Einen Counter hatte ich auch nie, AccessLog war schon immer mein bester und zuverlässiger Freund ;)

  8. 8
    Kommentar von Frank Bültge

    @Sergej Müller: Ich meinte damit, dass ich keinelei Werte lese; denke mir immer, dass es mich zu viel zeit kostet.

  9. 9
    Kommentar von Sergej Müller

    Ich weiß, was du meinst. Ich schau auch nicht explizit nach den Zahlen, paar Mal im Jahr vielleicht, da Logfiles mit der Zeit verworfen werden.

  10. 10
    Kommentar von Wishu

    In WordPress 2.6.1 gibt es doch auch bereits die Möglichkeit deaktivierte Plugins vom Server zu löschen. Wo ist jetzt der genaue Unterschied?

    Gruß
    Wishu

  11. 11
    Kommentar von Frank Bültge

    @Wishu: Das man die Daten in der DB behält und so im Laufe der Zeit Unmengen an Laichen hat.

  12. 12
    Kommentar von Wishu

    Ok, dann freue ich mich jetzt schon auf die Version 2.7 ;)
    Scheint ja einiges mitzubringen.

    Gruß
    Wishu

  13. 13
    Kommentar von Gebintit

    Gestern beschäftigt ich mich ausgiebig mit meiner WordPress-Datenbank wegen der lästigen Umstellung von latin1 auf utf8 und mir fiel auf, wie viele Einträge z.B. das K2-Theme in den Options hinterlassen hat, obwohl ich es schon lange nicht mehr verwende. Es wäre guter Stil, wenn nicht nur die Plugins, sondern auch die Themes bei einer Deinstallation die Datenbank von ihren Einträgen bereinigen können. Ich habe jetzt schon im PHPmyAdmin 10 Seiten Options, es könnten mind. 2 weniger sein!

  14. 14
    Kommentar von HiPPiE

    Ja sorry Frank, aber das hier hat mir nach der Suche nach "wordpress entwürfe aus datenbank löschen" keinesfalls geholfen und so'n SEO-Zeugs müllt Google nur unnötig zu.

  15. 15
    Kommentar von Frank Bültge

    wie Seo-Zeugs; das is tein How Tow, wie man als Plugin Autor das Löschen der Einträge in der DB vorsieht, wie es sein sollte. Um die Entwürfe zu löschen gibt es Plugins und Tutorials in vielerlei Ausfertigung.

  16. 16
    Kommentar von Latz

    In den aktuellen WordPress-Versionen (2.8 und bleeding-edge von 2.9) ist Folgendes in der Datei wp-includes/plugin.php zu lesen:

    function register_uninstall_hook($file, $callback) {
    // The option should not be autoloaded, because it is not needed in most
    // cases. Emphasis should be put on using the 'uninstall.php' way of
    // uninstalling the plugin.

    Der Weg über die zusätzliche Datei scheint also das "offizielle" Verfahren zu sein.

  17. 17
    Kommentar von Frank Bültge

    @Latz: ja, du kannst via Datei oder Hook gehen; je nach Wunsch - beides ist und bleibt möglich

Kommentare sind geschlossen.