Comment activer les plugins via le code?

22

Si possible, comment activer les plugins installés (ce qui signifie que les fichiers ont été placés dans le répertoire wp-content / plugins) à partir d'autres plugins?

rsman
la source

Réponses:

30

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' );
sorich87
la source
1
Comme l'a écrit Rarst, ce n'est pas très «sûr». Vous devez vous assurer que les plugins que vous activez de cette manière sont sûrs / ne casseront pas votre site.
sorich87
10
Pas sûr du tout, même, mais diable, si vous les activez par programme, vous êtes censé savoir ce que vous faites. ;-)
Denis de Bernardy
La sécurité mise à part - je veux dire, cela ne fait pas partie de la question, non? - J'aime l'approche de Sorich car elle appelle les filtres d'activation standard. Ainsi, les plugins obtiennent un changement pour exécuter leurs routines de configuration s'ils en ont.
hakre
3
Cela, au moins plus récemment, réinvente la roue. J'ai utilisé le intégré activate_plugin(), et il semble fonctionner de la même manière.
Jake
1
@SagiveSEO Son parfaitement sûr - c'est similaire à la façon dont WP le fait, sauf en exigeant une entrée / approbation de l'utilisateur et en formant des nonces et des vérifications pour ces nonces - il suffit d'introduire les vérifications nécessaires pour lancer cette fonction n'importe où - afin qu'il ne soit pas accessible de l'extérieur (à partir de Web, etc.), et il ne peut en aucun cas être appelé au hasard.
Unity100
13

Le processus d'activation du plugin est codé pour fonctionner avec l'interface d'administration WP. Il effectue quelques vérifications pour empêcher l'activation des plugins avec des erreurs (un tel chargement au démarrage peut casser WP).

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

Donc, si vous souhaitez activer le plugin par code, l'objectif lui-même est relativement facile - changer l' active_pluginsoption pour inclure ce plugin. Mais vous devrez recréer des crochets d'activation associés à partir de zéro et risquer de casser le site en activant sans étape sandbox.

Rarst
la source
7

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 quel sera son chemin, puis passer ce chemin à activate_plugin($plugin_path).

C'est plus facile à dire qu'à faire, et (au moins en 2.9) le code principal ne le rend pas facile.

Avant de pouvoir activate_plugin (), vous devez inclure le fichier plugin.php à partir de wp-admin / includes /. Vous devez é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);

Je l'utilise en production dans WP 2.9 et je n'ai pas eu de problème majeur, mais lors de mes tests, il a eu des résultats très inattendus avec WPMU, alors méfiez-vous de l'utiliser sur les installations réseau.

jerclarke
la source
un long moment s'est écoulé, mais si vous vous en souvenez, quel a été le résultat inattendu à ce sujet?
Ünsal Korkmaz
Je ne m'en souviens pas du tout. Je pense que cela n'a tout simplement pas fonctionné et j'ai fait les choses à la main parce que je n'avais pas trop de sites MS.
jerclarke
comment puis-je exécuter cela? si je viens de l'exécuter directement, get_option n'est pas défini ...
Janus Troelsen
Ajoutez ceci dans functions.php et cela devrait fonctionner, même si vous devez toujours mettre les choses dans les fonctions et les accrocher à "init" ou "wp".
jerclarke
3

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');
Mowshon
la source
Ethan, qu'est-ce qui ne va pas avec ma réponse?
Mowshon
Bien que publier uniquement le code soit correct pour une réponse, il peut être difficile d'interpréter les nouveaux programmeurs qui liront votre réponse. De cette façon, OP peut avoir une meilleure compréhension du fonctionnement de votre code.
Ethan Jinks O'Sullivan
0

Vous pouvez simplement appeler la fonction par défaut de WordPress.

activate_plugin('akismet/akismet.php');

Veuillez vérifier le lien ci-dessous pour plus de détails.

activer le plugin

Sohel Khan
la source