Comment activer les plugins via le code?

21

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?

    
posée rsman 14.11.2010 - 13:24

4 réponses

28

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' );
    
réponse donnée sorich87 14.11.2010 - 16:40
13

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

Il est géré par la fonction activate_plugin() ( source ) qui est documenté 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 rien et risquer de briser le site en activant l’étape sans bac à sable.

    
réponse donnée Rarst 14.11.2010 - 13:55
5

Les plugins sont stockés dans un tableau dans l'option 'active_plugins'. Le tableau contient le chemin du 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 facilite pas.

Avant de pouvoir activer_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èmes majeurs, mais lors de mes tests, il a donné des résultats très inattendus avec WPMU. Soyez donc prudent si vous utilisez ceci sur les installations réseau.

    
réponse donnée jerclarke 14.11.2010 - 20:14
2

Wordpress fournit une fonction permettant d'activer des plugins, selon le 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');
    
réponse donnée Mowshon 21.10.2016 - 14:09

Lire d'autres questions sur les étiquettes