Für Menschen · Seien Sie begeistert und Sie werden begeistern !

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
is_uninstallable_plugin($plugin)uninstall_plugin($plugin)und der zugehörige Hook in wp-includes/plugin.php
register_uninstall_hook($file, $callback)Um nun das Plugin mit der Möglichkeit zu bereichern, können zwei Möglichkeiten genutzt werden.
uninstall.php muss im Plugin vorliegen.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.

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');
}
uninstall.phpDie 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');
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.
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 980 Beiträge, 18722 Kommentare in 14 Kategorien und 464 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet. Erstellt mit ♥ zum Befüllen und Erhalten.
Design und Code ist unter Copyright
© 2001 - 2012 bueltge.de [by:ltge.de]
1. September 2008 um 13:13
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!
1. September 2008 um 17:25
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.
1. September 2008 um 20:22
@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?
1. September 2008 um 20:55
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.html1. September 2008 um 21:21
@Sergej Müller: Danke für den Link und die Antwort, das Interview werde ich gleich lesen.
1. September 2008 um 21:29
@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.
1. September 2008 um 21:31
Abend Frank. Einen Counter hatte ich auch nie, AccessLog war schon immer mein bester und zuverlässiger Freund
1. September 2008 um 21:56
@Sergej Müller: Ich meinte damit, dass ich keinelei Werte lese; denke mir immer, dass es mich zu viel zeit kostet.
1. September 2008 um 22:00
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.
2. September 2008 um 15:05
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
2. September 2008 um 17:45
@Wishu: Das man die Daten in der DB behält und so im Laufe der Zeit Unmengen an Laichen hat.
2. September 2008 um 18:40
Ok, dann freue ich mich jetzt schon auf die Version 2.7
Scheint ja einiges mitzubringen.
Gruß
Wishu
6. September 2008 um 13:22
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!
8. März 2009 um 14:12
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.
8. März 2009 um 16:12
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.
14. September 2009 um 18:11
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.
14. September 2009 um 22:30
@Latz: ja, du kannst via Datei oder Hook gehen; je nach Wunsch - beides ist und bleibt möglich