web-dev-qa-db-fra.com

Comment activer les plugins via le code?

Si possible, comment les plugins installés (c'est-à-dire que les fichiers ont été placés dans le répertoire wp-content/plugins) peuvent-ils être activés à partir d'autres plugins?

21
rsman

Voici comment je l'ai fait dans certaines applications Web:

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

Le processus d'activation du plug-in est codé pour fonctionner avec l'interface WP admin. Il effectue certaines vérifications pour empêcher l'activation de plug-ins avec des erreurs (le chargement tel que start peut casser WP).

Il est géré par la fonction activate_plugin() ( source ), qui est documentée comme étant inutilisable ailleurs.

Donc, si vous voulez activer le plugin par code, l’objectif lui-même est relativement facile: changer l’option active_plugins pour inclure ce plugin. Mais vous devrez recréer les crochets d'activation associés à partir de zéro et risquer de briser le site en activant sans étape Sandbox.

13
Rarst

Les plugins sont stockés dans un tableau dans l'option 'active_plugins'. Le tableau contient le chemin d'accès au fichier de chaque plug-in actif.

Pour activer un plugin, vous devez déterminer son chemin, puis le transmettre à activate_plugin($plugin_path).

C’est plus facile à dire qu’à faire cependant (et du moins dans la version 2.9), le code principal ne le rend pas facile.

Avant de pouvoir activate_plugin (), vous devez inclure le fichier plugin.php de wp-admin/includes /. Vous devriez également vérifier que votre plugin n'est pas déjà actif. Le résultat ressemble à ceci (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);

J'utilise ceci en production dans WP 2.9 et je n'ai pas eu de problème majeur, mais lors de mes tests, il a donné des résultats très inattendus avec WPMU.

6
jerclarke

Wordpress fournit une fonction pour activer les plugins, selon 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