it-swarm.com.de

Wie aktiviere ich Plugins über Code?

Wie können installierte Plugins (dh die Dateien wurden im Verzeichnis wp-content/plugins abgelegt) nach Möglichkeit von anderen Plugins aus aktiviert werden?

21
rsman

So habe ich es in einigen Web-Apps gemacht:

function run_activate_plugin( $plugin ) {
    $current = get_option( 'active_plugins' );
    $plugin = plugin_basename( trim( $plugin ) );

    if ( !in_array( $plugin, $current ) ) {
        $current[] = $plugin;
        sort( $current );
        do_action( 'activate_plugin', trim( $plugin ) );
        update_option( 'active_plugins', $current );
        do_action( 'activate_' . trim( $plugin ) );
        do_action( 'activated_plugin', trim( $plugin) );
    }

    return null;
}
run_activate_plugin( 'akismet/akismet.php' );
29
sorich87

Der Aktivierungsprozess des Plugins ist so codiert, dass er mit der WP Admin-Oberfläche funktioniert. Es werden einige Überprüfungen durchgeführt, um zu verhindern, dass fehlerhafte Plugins aktiviert werden (das Laden solcher Plugins beim Start kann das WP beschädigen).

Es wird von der Funktion activate_plugin() ( source ) behandelt, die an anderer Stelle als unbrauchbar dokumentiert ist.

Wenn Sie also das Plugin per Code aktivieren möchten, ist das Ziel selbst relativ einfach - Sie können die Option active_plugins so ändern, dass sie dieses Plugin enthält. Sie müssen jedoch die zugehörigen Aktivierungs-Hooks von Grund auf neu erstellen und riskieren, die Site zu beschädigen, indem Sie sie ohne Sandbox-Schritt aktivieren.

13
Rarst

Plugins werden in einem Array in der Option 'active_plugins' gespeichert. Das Array enthält den Dateipfad zu jedem aktiven Plugin.

Um ein Plugin zu aktivieren, müssen Sie den Pfad bestimmen und diesen dann an activate_plugin($plugin_path) übergeben.

Dies ist jedoch leichter gesagt als getan, und (zumindest in 2.9) macht es der Kerncode nicht einfach.

Bevor Sie_plugin () aktivieren können, müssen Sie die Datei plugin.php aus wp-admin/includes/einbinden. Sie sollten auch überprüfen, ob Ihr Plugin noch nicht aktiv ist. Das Ergebnis sieht ungefähr so ​​aus (YMMV):

// Define the new plugin you want to activate
$plugin_path = '/path/to/your/new/plugin.php';
// Get already-active plugins   
$active_plugins = get_option('active_plugins');
// Make sure your plugin isn't active
if (isset($active_plugins[$plugin_path]))
    return;

// Include the plugin.php file so you have access to the activate_plugin() function
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activate your plugin
activate_plugin($plugin_path);

Ich verwende dies in der Produktion in WP 2.9 und hatte keine größeren Probleme, aber in meinen Tests hatte es sehr unerwartete Ergebnisse mit WPMU. Achten Sie daher darauf, dies bei Netzwerkinstallationen zu verwenden.

6
jerclarke

Wordpress bietet eine Funktion zum Aktivieren von Plugins nach WP Codex

function plugin_activation( $plugin ) {
    if( ! function_exists('activate_plugin') ) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
    }

    if( ! is_plugin_active( $plugin ) ) {
        activate_plugin( $plugin );
    }
}

plugin_activation('akismet/akismet.php');
3
Mowshon