is_plugin_active la función no existe

10

Estoy usando WordPress 3.0.5 y he probado con 3.1rc4. En el archivo PHP principal de mi complemento, cuando intento llamar a is_plugin_active obtengo Call to undefined function is_plugin_active() . Puedo llamar a add_action y add_filter. ¿Qué debo revisar / cambiar para arreglar esto?

Esto está ocurriendo dentro del administrador en la página de Complementos. En la parte superior de mi archivo de complemento principal, if (function_exists('is_plugin_active')) { que siempre devuelve falso.

Tampoco puedo ver las funciones de mi archivo de complemento principal en otros complementos (si eso ayuda).

    
pregunta Carl 15.02.2011 - 00:59

8 respuestas

21

Esto se debe a que el archivo en el que se define is_plugin_active () - wp-admin/includes/plugin.php - solo se carga en el administrador, después de que se cargue su complemento.

Por lo tanto, solo puede llamarlo después de que se haya activado 'admin_init':

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

También puede llamar a is_plugin_active () en plantillas y desde páginas de usuario, lo que puede ser útil para los complementos relacionados (es decir, requiere el complemento 'xyz' para operar mi nuevo complemento). Debe incluir manualmente el archivo plugin.php como se indica en los documentos is_plugin_active () en Codex.

Este es un ejemplo funcional que uso en mis paquetes de complementos premium para asegurarme de que el complemento de base libre esté activo antes de invocar un objeto complementario. Requiere ciertos ganchos y amp; Los filtros estarán disponibles en el complemento básico o se bloquearán.

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 nota al margen, si tiene problemas con is_plugin_active () desde un inicio de sesión de administrador activo, es probable que esté haciendo pruebas antes de que admin_init se inicie. admin_menu se dispara antes de que admin_init y hacer pruebas en admin_menu me haya "mordido" antes. El nombre "admin_init" que me parece contraintuitivo ya que admin_menu ya está ejecutado. Pienso en init como "lo primero que se debe ejecutar" ... quizás admin_kinda_init () sería mejor. :)

    
respondido por el Lance Cleveland 26.02.2013 - 19:45
8

Una solución rápida y sucia sería duplicar la función manualmente:

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

Es bastante corto, por lo que no debería ser demasiado difícil de implementar en tu propio código como solución.

    
respondido por el Tom Auger 30.04.2011 - 01:14
4

Simple y fácil. Tomado de WP

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

y luego cualquier instancia de

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

   }

obtener la función de verificación. Así que no hay más errores.

    
respondido por el Spencer Labadie 15.07.2014 - 00:34
3

Prefiero la respuesta de Tom Auger con cómo definir tu propia función is_plugin_active en lugar de incluir plugin.php. Sin embargo, usar el mismo nombre de función provocó que mi área de administración se bloquee. Usando un nombre de función diferente lo resolvió:

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

¿Estás usando is_plugin_active dentro del administrador o del front-end? Estoy bastante seguro de que is_plugin_active es solo una función de administración que se encuentra dentro de wp-admin / includes / plugin.php.

Además, ¿su archivo de complemento principal hace uso del Encabezado de archivo de Wordpress ? ¿Se incluye su complemento después de que se haya cargado el archivo plugin.php anterior?

    
respondido por el Jonnybojangles 15.02.2011 - 02:23
1

Para depurar complementos activos:

var_dump(get_option(...));

Para verificar un complemento específico:

in_array(get_option(...));

La acción se llama " active_plugins " IIRC.

    
respondido por el hakre 15.02.2011 - 01:46
0

Ninguna de estas soluciones funcionó para mí, pero esto funcionó:

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

Encontré esta solución en codebangers.com

    
respondido por el fenderflip 03.06.2014 - 16:57

Lea otras preguntas en las etiquetas