Como ativar plugins via código?

21

Se possível, como os plugins instalados (o que significa que os arquivos foram colocados no diretório wp-content / plugins) podem ser ativados de outros plugins?

    
por rsman 14.11.2010 / 13:24
fonte

4 respostas

28

Foi assim que fiz em alguns aplicativos da 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' );
    
por sorich87 14.11.2010 / 16:40
fonte
13

O processo de ativação do plug-in é codificado para funcionar com a interface administrativa do WP. Ele executa algumas verificações para evitar a ativação de plug-ins com erros (o carregamento no início pode interromper o WP).

Ele é gerenciado por activate_plugin() function ( fonte ) que é documentada como inutilizável em outro lugar.

Então, se você quiser ativar o plugin pelo código, o objetivo em si é relativamente fácil - alterar a opção active_plugins para incluir esse plugin. Mas você terá que recriar os ganchos de ativação relacionados a partir do zero e correrá o risco de quebrar o site ativando sem a etapa de sandbox.

    
por Rarst 14.11.2010 / 13:55
fonte
5

Os plug-ins são armazenados em uma matriz na opção 'active_plugins'. A matriz contém o caminho do arquivo para cada plugin que está ativo.

Para ativar um plug-in, você precisa determinar qual será o caminho e, em seguida, passar esse caminho para activate_plugin($plugin_path) .

No entanto, é mais fácil falar do que fazer e (pelo menos em 2.9) o código principal não facilita.

Antes de você poder ativar o plugin_plugin () você precisa incluir o arquivo plugin.php do wp-admin / includes /. Você também deve verificar se seu plug-in ainda não está ativo. O resultado é algo como isto (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);

Eu uso isso em produção no WP 2.9 e não tive problemas maiores, mas no meu teste ele teve resultados muito inesperados com o WPMU, então, cuidado com isso em instalações de rede.

    
por jerclarke 14.11.2010 / 20:14
fonte
2

O Wordpress fornece uma função para ativar plugins, de acordo com 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');
    
por Mowshon 21.10.2016 / 14:09
fonte