is_plugin_active function não existe

10

Estou usando o WordPress 3.0.5 e testei com o 3.1rc4. No arquivo PHP principal do meu plugin, quando tento chamar is_plugin_active, recebo Call to undefined function is_plugin_active() . Eu posso chamar add_action e add_filter. O que devo verificar / alterar para corrigir isso?

Isso está acontecendo dentro do administrador na página "Plug-ins". Na parte superior do meu arquivo de plug-in principal, if (function_exists('is_plugin_active')) { , que sempre retorna false.

Eu também não consigo ver as funções do meu arquivo de plugin principal em outros plugins (se isso ajudar algum).

    
por Carl 15.02.2011 / 00:59

8 respostas

21

Isso porque o arquivo no qual is_plugin_active () está definido - wp-admin/includes/plugin.php - só é carregado no admin, depois que seu plugin é carregado.

Assim, você só pode chamar depois que 'admin_init' for acionado:

function check_some_other_plugin() {
  if ( is_plugin_active('some-plugin.php') ) {
    ...
  }
}
add_action( 'admin_init', 'check_some_other_plugin' );
    
por scribu 15.02.2011 / 02:12
8

Você pode chamar is_plugin_active () em modelos e também em páginas de usuários, o que pode ser útil para plugins relacionados (ou seja, requer o plugin 'xyz' para operar meu novo plugin). Você precisa incluir manualmente o arquivo plugin.php conforme observado nos documentos is_plugin_active () no Codex.

Aqui está um exemplo funcional que uso em meus pacotes complementares premium para garantir que o plug-in de base livre esteja ativo antes de invocar um objeto de complemento. Requer certos ganchos & filtros para estar disponível no plugin base ou irá falhar.

include_once(ABSPATH.'wp-admin/includes/plugin.php');
if (!function_exists('is_plugin_active') || !is_plugin_active('store-locator-le/store-locator-le.php')) { 
   return;
}

Como um aparte, se você está tendo problemas com is_plugin_active () de dentro de um login de administrador ativo, é provável porque você está testando antes de iniciar o admin_init. admin_menu é acionado antes de admin_init e fazer testes em admin_menu me "picou" antes. O nome "admin_init", que parece contra-intuitivo para mim desde admin_menu já é executado. Eu penso no init como "primeira coisa a rodar" ... talvez admin_kinda_init () seja melhor. :)

    
por Lance Cleveland 26.02.2013 / 19:45
8

Uma solução rápida e suja seria duplicar a função manualmente:

function is_plugin_active( $plugin ) {
    return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}

É muito curto, por isso não deve ser muito difícil implementar em seu próprio código como solução alternativa.

    
por Tom Auger 30.04.2011 / 01:14
4

Simples e fácil. Extraído de WP

if ( ! function_exists( 'is_plugin_active' ) )
     require_once( ABSPATH . '/wp-admin/includes/plugin.php' );

e, em seguida, todas as instâncias de

 if ( is_plugin_active( 'feed-them-social/feed-them.php' ) ) {

   }

obtenha a verificação de função. SO não mais erros.

    
por Spencer Labadie 15.07.2014 / 00:34
3

Eu preferi a resposta de Tom Auger com como definir sua própria função is_plugin_active em vez de incluir plugin.php. No entanto, usar o mesmo nome de função fez com que minha área administrativa falhasse. Usando um nome de função diferente resolveu:

function is_plugin_active_byme( $plugin ) {
    return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
    
por Jeroen 03.10.2015 / 11:19
1

Você está usando is_plugin_active dentro do admin ou do front-end? Tenho certeza de que is_plugin_active é apenas uma função administrativa encontrada dentro de wp-admin / includes / plugin.php.

Além disso, o seu arquivo de plug-in principal faz uso do Wordpress File Header ? Seu plugin está sendo incluído após o carregamento do arquivo plugin.php acima?

    
por Jonnybojangles 15.02.2011 / 02:23
1

Para depurar plugins ativos:

var_dump(get_option(...));

Para verificar se há um plug-in específico:

in_array(get_option(...));

A ação é chamada " active_plugins " IIRC.

    
por hakre 15.02.2011 / 01:46
0

Nenhuma dessas soluções funcionou para mim, mas foi o que aconteceu:

include_once('wp-admin/includes/plugin.php');

Encontrei esta solução em codebangers.com

    
por fenderflip 03.06.2014 / 16:57