ti-enxame.com

a função is_plugin_active não existe

Estou usando o WordPress 3.0.5 e testei com o 3.1rc4. No arquivo principal PHP do meu plugin, quando tento chamar is_plugin_active, obtenho 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 admin na página Plugins. No topo do meu arquivo de plugins principal eu tenho, 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).

13
Carl

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

Assim, você só pode chamá-lo 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' );
23
scribu

Você pode chamar is_plugin_active () em templates e também em páginas de usuários, o que pode ser útil para plugins relacionados (ex .: requer 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 gratuito esteja ativo antes de invocar um objeto de complemento. Isso requer que certos ganchos e filtros estejam disponíveis no plug-in básico ou ele 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 admin 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 () seria melhor. :)

9
Lance Cleveland

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 uma solução alternativa.

8
Tom Auger

Simples e fácil Retirado de WP

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

e, em seguida, quaisquer instâncias de

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

   }

obter a verificação de função. SO sem mais erros.

4
Spencer Labadie

Eu preferia 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() ) );
}
3
Jeroen

Para depurar plugins ativos:

var_dump(get_option(...));

Para verificar um plug-in específico:

in_array(get_option(...));

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

1
hakre

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 de Wordpress File Header ? Seu plugin está sendo incluído após o carregamento do arquivo plugin.php acima?

1
Jonnybojangles

Nenhuma dessas soluções funcionou para mim, mas isso aconteceu:

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

Eu encontrei esta solução em codebangers.com

0
fenderflip