Ich mache ein WordPress-Plugin. Was sind typische Dinge, die ich in die Deinstallationsfunktion aufnehmen sollte?
Soll ich beispielsweise Tabellen löschen, die ich in der Installationsfunktion erstellt habe?
Bereinige ich meine Optionseinträge?
Noch etwas?
plugins
activation
uninstallation
deactivation
Rotkonservatorium
quelle
quelle
Antworten:
Es gibt drei verschiedene Haken. Sie lösen in folgenden Fällen aus:
Sicheres Auslösen von Funktionen während der Szenarien
Im Folgenden werden die richtigen Methoden zum sicheren Verknüpfen von Rückruffunktionen gezeigt, die während der genannten Aktionen ausgelöst werden.
Da könntest du diesen Code in einem Plugin verwenden, das benutzt
Ich werde drei verschiedene Demo-Plugins zeigen , die Sie überprüfen und später in Ihren eigenen Plugins implementieren können.
Wichtiger Hinweis vorab!
Da dieses Thema extrem schwierig und sehr detailliert ist und über ein Dutzend Randfälle verfügt, wird diese Antwort niemals perfekt sein. Ich werde es im Laufe der Zeit weiter verbessern, schauen Sie also regelmäßig vorbei.
(1) Plugins aktivieren / deaktivieren / deinstallieren.
Die Setup-Callbacks des Plugins werden von core ausgelöst und Sie haben keinen Einfluss darauf, wie core dies tut. Es gibt einige Dinge zu beachten:
echo/print
etwas (!) Während der Installation Rückrufe. Dies wird zu einerheaders already sent
Meldung führen und Core wird empfehlen, Ihr Plugin zu deaktivieren und zu löschen ... fragen Sie nicht: Ich weiß ...exit()
habe allen verschiedenen Rückrufen Anweisungen hinzugefügt , damit Sie einige Einblicke in das bekommen, was wirklich passiert. Kommentieren Sie sie einfach aus, um zu sehen, wie etwas funktioniert.__FILE__ != WP_PLUGIN_INSTALL
und (falls nicht: Abbrechen!), Ob das Plugin wirklich deinstalliert wird. Ich würde empfehlen,on_deactivation()
während der Entwicklung einfach Rückrufe auszulösen , damit Sie sich die Zeit sparen, die Sie benötigen, um alles wieder in den Griff zu bekommen. Zumindest ist es das, was ich tue.defined( 'ABSPATH' ) OR exit;
wp_die()
wenn ein Bildschirm nach den richtigen Berechtigungen fragt (und wenn Sie es erneut versuchen möchten ... ja, sicher ), wenn ein Fehler auftritt. Dies geschieht als Kern leitet Sie, setzt die aktuelle$GLOBALS['wp_list_table']->current_action();
zuerror_scrape
und überprüft dann die Referrer fürcheck_admin_referer('plugin-activation-error_' . $plugin);
, wo$plugin
ist$_REQUEST['plugin']
. Die Weiterleitung erfolgt also bei der Hälfte des Seitenaufwands, und Sie erhalten diese verdrahtete Bildlaufleiste und auf dem Bildschirm einen Einblick in das gelbe Benachrichtigungs- / Meldungsfeld für Administratoren. Wenn dies passiert: Bleiben Sie ruhig und suchen Sie einfach nach dem Fehler mit einigemexit()
und schrittweisem Debuggen.(A) Einfaches Funktions-Plugin
Beachten Sie, dass dies möglicherweise nicht funktioniert, wenn Sie die Rückrufe vor der Funktionsdefinition einbinden.
(B) Eine klassenbasierte / OOP-Architektur
Dies ist das häufigste Beispiel für heutige Plugins.
(C) Eine klassenbasierte / OOP-Architektur mit einem externen Setup-Objekt
Dieses Szenario geht davon aus, dass Sie eine Haupt-Plugin - Datei und eine zweite Datei mit dem Namen bekamen
setup.php
in einem Unterverzeichnis des Plugins genanntinc
:~/wp-content/plugins/your_plugin/inc/setup.php
. Dies funktioniert auch, wenn sich der Plugin-Ordner außerhalb der standardmäßigen WP-Ordnerstruktur befindet, wenn das Inhaltsverzeichnis umbenannt wird oder wenn Ihre Setup-Datei einen anderen Namen hat. Nur derinc
Ordner muss den gleichen Namen und Speicherort im Stammverzeichnis des Plugins haben.Hinweis: Sie können die drei
register_*_hook()*
Funktionen und Klassen einfach übernehmen und in Ihr Plugin einfügen.Die Haupt-Plugin-Datei:
Die Setup-Datei:
(2) Plugin-Updates
Wenn Sie ein Plugin mit einer eigenen DB-Tabelle oder eigenen Optionen schreiben, müssen Sie möglicherweise Änderungen oder Upgrades vornehmen.
Leider gibt es bisher keine Möglichkeit, etwas über Plugin / Theme-Installation oder Update / Upgrade auszuführen. Gerne gibt es eine Abhilfe: Verknüpfen Sie eine benutzerdefinierte Funktion mit einer benutzerdefinierten Option (ja, es ist lahm - aber es funktioniert).
Quelle
Diese Update-Funktion ist ein nicht so schönes / gut geschriebenes Beispiel, aber wie gesagt: Es ist ein Beispiel und die Technik funktioniert gut. Wird das mit einem späteren Update verbessern.
quelle
check_admin_referer()
. Sie müssen nicht desinfiziert werden, da der Core dies nicht selbst tut und es sowieso mit nicht desinfizierten$_REQUEST
Werten vergleicht. Aber wenn sie deswegen anfangen zu weinen wie kleine Mädchen, benutzefilter_var()
oder benutzeesc_attr()
es einfach .Um das aktuelle System auf erforderliche Features wie PHP-Version oder installierte Erweiterungen zu testen, können Sie Folgendes verwenden:
Test mit einem Check für PHP 5.5:
quelle
register_activation_hook
- warum nicht? Wird dieses Feuer auch vorher oder nachherregister_activation_hook
ausgelöst und wird esregister_activation_hook
auch dann ausgelöst, wenn die oben genannten Bedingungen nicht erfüllt werden?add_action( 'admin_notices', 't5_check_admin_notices', 0 );
in einen Aktivierungs-Hook zu wechseln und das Plugin wird aktiviert, ohne die Überprüfungen durchzuführen. . .admin_notices
.