Kann meine hooked uninstall classifunktion auf eine globale var zugreifen, die in der Hauptplugin-Datei deklariert ist?

Mein derzeitiges Setup ist wie folgt …

In der Haupt-Plugin-Datei sind diese zwei Hooks gesetzt (nicht innerhalb einer class):

register_activation_hook(__FILE__, array('DG_Setup', 'activation')); register_uninstall_hook(__FILE__, array('DG_Setup', 'uninstall')); 

DG_Setup Hauptdatei enthält die Datei, die DG_Setup :

 include_once DG_PATH . 'inc/class-setup.php'; 

Und erklärt $dg_options :

 define('DG_OPTION_NAME', 'document_gallery'); $dg_options = get_option(DG_OPTION_NAME); 

Ich nahm an, dass durch das Verweisen auf die Hauptplugin-Datei für den Hook das gesamte Setup ausgeführt würde, bevor mein Deinstallations-Hook ausgeführt wurde, aber dies scheint nicht der Fall zu sein.

In derselben Datei werden eine Reihe von Deklarationen und Variablen eingerichtet. Wenn der Deinstallations-Hook ausgetriggers wird, scheint er keinen Zugriff auf einen der deklarierten Werte oder auf die Variable zu haben. Ich habe versucht, die Hauptplugin-Datei explizit in den Deinstallations-Hook aufzunehmen, aber das ändert nichts.

 class DG_Setup { public static function uninstall() { if (!current_user_can('activate_plugins')) return; check_admin_referer('bulk-plugins'); include_once plugin_dir_path(__FILE__) . 'class-thumber.php'; $options = DG_Thumber::getOptions(); var_dump($options); // null foreach ($options['thumbs'] as $val) { if (false !== $val) { @unlink($val['thumb_path']); } } delete_option(DG_OPTION_NAME); } } class DG_Thumber { public static function getOptions() { include_once plugin_dir_path(dirname(__FILE__)) . 'document-gallery.php'; global $dg_options; return $dg_options['thumber']; } } 

Natürlich könnte ich alle diese Werte einfach neu deklarieren, aber dann deklariere ich denselben Wert an mehreren Stellen, was sehr un-DRY ist . Meine Frage ist also, wie kann ich damit sauber umgehen?

Solutions Collecting From Web of "Kann meine hooked uninstall classifunktion auf eine globale var zugreifen, die in der Hauptplugin-Datei deklariert ist?"

Das Problem ist, dass Sie $dg_options als global deklarieren:

 define('DG_OPTION_NAME', 'document_gallery'); $dg_options = get_option(DG_OPTION_NAME); 

Während der Deinstallation sind Sie nicht im globalen Bereich, Ihre Datei wird von uninstall_plugin() .

Sie müssen dies am Anfang der Haupt-Plugin-Datei hinzufügen:

 global $dg_options; 

Wann immer Sie möchten, dass eine Variable global ist, sollten Sie unbedingt die global statement verwenden. Nehmen Sie den Spielraum nicht als selbstverständlich hin.