it-swarm.com.de

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

Ich habe zu Beginn einiger Plugins eine einfache Abhängigkeitsprüfung durchgeführt - diese prüft, ob ein anderes Plugin installiert und aktiv ist (mit class_exists()).

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

    /**
     * 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 );

            }

        }

    }

Dies funktioniert alles gut, bis ich ein Plugin aktualisieren muss - dann sind alle anderen Plugins deaktiviert -, da alle class_exists() -Prüfungen false zurückgeben.

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

2
Q Studio

Anstatt die Plugins so zu ordnen, dass sie in einer bestimmten Reihenfolge geladen werden, müssen Sie jedes Plugin so lange laden, bis der Aktionshook "plugins_loaded" ausgeführt wird.

Mit anderen Worten, wenn ein Plugin mit einer Abhängigkeit enthalten ist und ausgeführt wird, sollte es nichts direkt tun. Stattdessen sollte es Funktionen und dann Aufrufe von add_action haben, um diese Funktionen mit plugins_loaded zu verknüpfen. Diese später aufgerufene Funktion kann die class_exists überprüfen und entsprechend handeln.

3
Otto

Wie wäre es mit WP_INSTALLING? - Dieser Check befindet sich über dem Haupt-Plugin Class ...

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 "<div id='message' class='error'><p><code>".$plugin["Name"]."</code> has been deactivated because it requires the <a href='#'>PLUGIN NAME</a>.</p></div>";
        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-Klasse unten:

if ( ! class_eixsts( "Plugin_Class" ) ) 
{ 
    Plugin_Class() 
    { 
      ... 
    } 
}
0
Q Studio