Wie aktiviere ich Plugins über Code?

22

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

rsman
quelle

Antworten:

30

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' );
sorich87
quelle
1
Wie Rarst schrieb, ist dies nicht sehr "sicher". Sie sollten sicherstellen, dass die Plugins, die Sie auf diese Weise aktivieren, sicher sind und Ihre Website nicht beschädigen.
Sorich87
10
Selbst wenn Sie sie programmgesteuert aktivieren, sollten Sie wissen, was Sie tun. ;-)
Denis de Bernardy
Sicherheit beiseite - ich meine, das ist nicht Teil der Frage, oder? - Ich mag Sorichs Ansatz, weil er die Standard-Aktivierungsfilter aufruft. Die Plugins erhalten also eine Änderung, um ihre Setup-Routinen auszuführen, wenn sie welche haben.
Hakre
3
Dies ist zumindest in jüngerer Zeit das Rad neu zu erfinden. Ich habe das eingebaute verwendet activate_plugin(), und es scheint genauso zu funktionieren.
Jake
1
@SagiveSEO Es ist absolut sicher - es ähnelt der Vorgehensweise von WP, erfordert jedoch Benutzereingaben / -genehmigungen und das Erstellen von Nonces und Überprüfungen für diese Nonces. Führen Sie einfach die erforderlichen Überprüfungen ein, um diese Funktion an einem beliebigen Ort auszulösen web etc), und es kann in keiner Weise zufällig aufgerufen werden.
Unity100
13

Der Aktivierungsprozess des Plugins ist so programmiert, dass er mit der WP-Administrationsoberflä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 einer activate_plugin()Funktion ( Quelle ) 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 zu ändern active_plugins Option , um das Plugin einzuschließen. 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.

Rarst
quelle
7

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 Pfad an übergeben activate_plugin($plugin_path) .

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.

Jerclarke
quelle
Es ist eine lange Zeit vergangen, aber wenn Sie sich erinnern, was war das unerwartete Ergebnis?
Ünsal Korkmaz
Ich kann mich überhaupt nicht erinnern. Ich denke, es hat einfach nicht funktioniert und ich habe Dinge von Hand gemacht, weil ich nicht zu viele MS-Sites hatte.
Jerclarke
wie führe ich das aus Wenn ich es nur direkt ausführe, ist get_option nicht definiert ...
Janus Troelsen
Fügen Sie dies in functions.php hinzu und es sollte funktionieren, obwohl Sie auch dann immer Dinge in Funktionen einfügen und sie mit "init" oder "wp" verknüpfen sollten.
Jerclarke
3

Wordpress bietet laut WP Codex eine Funktion zum Aktivieren von Plugins

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');
Mowshon
quelle
Ethan, was ist los mit meiner Antwort?
Mowshon
Während das Posten nur des Codes für eine Antwort in Ordnung ist, kann es für neue Programmierer, die Ihre Antwort lesen, schwierig sein, diese zu interpretieren. Auf diese Weise kann OP besser verstehen, wie Ihr Code funktioniert.
Ethan Jinks O'Sullivan
0

Sie können einfach die WordPress-Standardfunktion aufrufen.

activate_plugin('akismet/akismet.php');

Bitte überprüfen Sie untenstehenden Link für weitere Details.

aktiviere das Plugin

Sohel Khan
quelle