Wie überprüfe ich, ob WordPress Plugins aktualisiert?

Ich habe eine einfache Abhängigkeitskontrolle am Anfang einiger Plugins – die prüfen, ob ein anderes Plugin installiert und aktiv ist (mit class_exists() ).

Dies funktioniert gut im normalen WordPress-Ablauf – da das Plugin, das die erforderliche class enthält, so eingestellt wird, dass es früher instanziiert wird, und ich auch die verfügbaren Plugins neu anordne, so dass dieses Plugin zuerst geladen wird – so:

  /** * Force this plugin to load first * * @since 0.1 * @return void */ public function load_this_plugin_first() { // grab plugin directory + file name ## $path = plugin_basename(dirname(__FILE__)).'/'.basename(__FILE__); // grab the list of active plugins ## if ( $plugins = get_option( 'active_plugins' ) ) { // check if out plugin is in there ## if ( $key = array_search( $path, $plugins ) ) { // push it to the top of the list ## array_splice( $plugins, $key, 1 ); array_unshift( $plugins, $path ); update_option( 'active_plugins', $plugins ); } } } 

Das alles funktioniert gut, bis ich ein Plugin aktualisieren muss – dann sind die anderen Plugins alle deaktiviert – da alle class_exists() Checks false zurückgeben.

Also, ich würde gerne wissen, ob es eine Konstante gibt – wie DOING_AUTOSAVE für Plugin-Updates – sowas wie DOING_PLUGIN_UPDATE?

Solutions Collecting From Web of "Wie überprüfe ich, ob WordPress Plugins aktualisiert?"

Anstatt Ihre Plugins neu zu ordnen, um sie in einer bestimmten Reihenfolge zu laden, müssen Sie für jeden von ihnen ein anderes Plug-in laden, um die Initialisierung auf den “plugins_loaded” -Aktionshook zu verschieben.

Mit anderen Worten, wenn ein Plugin mit einer Abhängigkeit enthalten und ausgeführt wird, sollte es nichts direkt tun. Stattdessen sollte es functionen haben und dann add_action Aufrufe, um diese functionen zu plugins_loaded zu haken. Diese function, die später aufgerufen wird, kann die Prüfung class_exists ausführen und entsprechend handeln.

Wie wäre es mit WP_INSTALLING? – Dieser Check wird über dem Hauptplugin Class platziert …

 if ( ! class_exists( 'REQUIRED_CLASS_NAME' ) && ! defined( 'WP_INSTALLING' ) ) { // give some notice to the user ## add_action('admin_notices', function(){ $plugin = get_plugin_data( __FILE__ ); echo "

".$plugin["Name"]." has been deactivated because it requires the PLUGIN NAME.

"; if ( isset( $_GET['activate'] ) ) { unset( $_GET['activate'] ); // remove the activation notice ## } }); // turn this plugin off ## add_action('admin_notices', function(){ deactivate_plugins( plugin_basename( __FILE__ ) ); }); // stop this plugin from running ## return; }

Dann ist die eigentliche Plugin-class unten:

 if ( ! class_eixsts( "Plugin_Class" ) ) { Plugin_Class() { ... } }