La función is_plugin_active no existe

15 feb 2011, 01:59:14
Vistas: 36K
Votos: 31

Estoy usando WordPress 3.0.5 y he probado con 3.1rc4. En el archivo PHP principal de mi plugin, 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 solucionar esto?

Esto está sucediendo dentro del área de administración en la página de Plugins. En la parte superior de mi archivo principal del plugin tengo, if (function_exists('is_plugin_active')) { que siempre devuelve false.

Tampoco puedo ver las funciones de mi archivo principal del plugin en otros plugins (si esto ayuda en algo).

5
Comentarios

No estoy seguro según tu descripción - ¿se trata de un problema con el plugin activado o estás intentando hacer algo durante la activación o bajo otras condiciones específicas?

Rarst Rarst
15 feb 2011 21:15:59

He descubierto que function_exists('is_plugin_active') devuelve falso cuando se llama desde el archivo principal del plugin si está fuera de un método, pero devuelve verdadero cuando se llama dentro del método que se ejecuta para la acción activated_plugin.

Carl Carl
16 feb 2011 05:36:06

¿En qué página ves el error? ¿En la página de plugins (wp-admin/plugins.php)? ¿Ocurre esto antes o después de activar el plugin en cuestión?
Rarst tiene un buen punto. ¿Sabes en qué momento estás llamando a la función dentro de WordPress?

Jonnybojangles Jonnybojangles
16 feb 2011 21:58:30

Veo el error en wp-admin/plugins.php después de activar el plugin. Tengo la verificación en algunos de los métodos que están enganchados como acciones y funciona allí. Parece que tiene algo que ver con el orden de inclusión.

Carl Carl
17 feb 2011 01:37:40

Los plugins se cargan en orden alfabético, por lo que puede ser simplemente que tu plugin no se está procesando lo suficientemente temprano. Intenta renombrar tu plugin para que comience con la letra a (ej. a_miplugin-nombre) para que se cargue antes. La mejor opción, sin embargo, sería llamar a tu bloque function_exists desde dentro de una función que se ejecute después de que los plugins estén cargados. Puedes ver el orden aproximado de ejecución en el codex de WP: https://codex.wordpress.org/Plugin_API/Action_Reference

Phill Healey Phill Healey
19 feb 2019 21:07:04
Todas las respuestas a la pregunta 11
2
45

Esto ocurre porque el archivo donde se define is_plugin_active() - wp-admin/includes/plugin.php - solo se carga en el área de administración, después de que tu plugin se haya cargado.

Por lo tanto, solo puedes 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' );
15 feb 2011 03:12:53
Comentarios

Si ya estoy en el administrador, ¿hay algo que podría estar configurado incorrectamente que me impida acceder a esto?

Carl Carl
15 feb 2011 16:03:48

Consulta la respuesta actualizada.

scribu scribu
30 abr 2011 03:06:09
1
20

Puedes llamar a is_plugin_active() en plantillas y desde páginas de usuario también, lo cual puede ser útil para plugins relacionados (por ejemplo, requerir que el plugin 'xyz' esté activo para que funcione mi nuevo plugin). Necesitas incluir manualmente el archivo plugin.php como se indica en la documentación de is_plugin_active() en el Codex.

Aquí tienes un ejemplo funcional que uso en mis paquetes de complementos premium para asegurarme de que el plugin base gratuito esté activo antes de invocar un objeto del complemento. Requiere que ciertos hooks y filtros estén disponibles en el plugin base o fallará.

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 aparte, si tienes problemas con is_plugin_active() desde un inicio de sesión de administrador activo, probablemente sea porque estás haciendo pruebas antes de que se ejecute admin_init. admin_menu se ejecuta antes que admin_init y hacer pruebas en admin_menu me ha dado problemas antes. El nombre "admin_init" me parece contra-intuitivo ya que admin_menu ya se ejecutó. Yo pienso en init como "lo primero que se ejecuta"... quizás admin_kinda_init() sería un nombre mejor. :)

26 feb 2013 20:45:06
Comentarios

Agregar include_once(ABSPATH.'wp-admin/includes/plugin.php'); funcionó para mí. ¡Gracias!

Dave Dave
12 abr 2018 03:42:27
0
14

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

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

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

30 abr 2011 02:14:42
2

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' ) ) {

   }

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

15 jul 2014 01:34:40
Comentarios

Si estás usando requireonce probablemente no necesites verificar la función... ?

Phill Healey Phill Healey
23 mar 2017 22:07:12

Haces eso para asegurarte de que el plugin está definido antes de intentar usarlo, de lo contrario podrías tener problemas más adelante.

Spencer Labadie Spencer Labadie
19 feb 2019 20:06:49
1

Preferí la respuesta de Tom Auger sobre 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 hizo que mi área de administración se bloqueara. Usar un nombre de función diferente lo resolvió:

function is_plugin_active_byme( $plugin ) {
    return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
3 oct 2015 12:19:18
Comentarios

Estoy de acuerdo. Aunque puedes verificar si hay conflicto en tu declaración de la función, WP no lo hace y por lo tanto tu WP desencadenará un error.

Chris Sprague Chris Sprague
9 sept 2018 13:54:23
0

Para depurar plugins activos:

var_dump(get_option(...));

Para verificar un plugin específico:

in_array(get_option(...));

La acción se llama "active_plugins" si mal no recuerdo.

15 feb 2011 02:46:44
1

¿Estás usando is_plugin_active dentro del área de administración o en el 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, ¿tu archivo principal del plugin hace uso del Encabezado de Archivo de WordPress? ¿Se está incluyendo tu plugin después de que se cargue el archivo plugin.php mencionado anteriormente?

15 feb 2011 03:23:15
Comentarios

Esto está sucediendo dentro del panel de administración en la página de Plugins. El plugin tiene la cabecera de archivo WP sugerida. ¿Cómo puedo verificar si el plugin se está incluyendo después de plugin.php?

Carl Carl
15 feb 2011 16:02:40
0

Si estás usando Elementor y enfrentas el problema solo en el frontend mientras funciona en la vista del editor.

Puedes usar la función is_edit_mode() de Elementor, para que la condición solo se ejecute en la vista del editor.

if ( \Elementor\Plugin::$instance->editor->is_edit_mode() && is_plugin_active('some-plugin.php') ) {
    return true;
} else {
    return false;
}
29 oct 2020 10:11:58
0

Puedes verificar si un plugin está activo de la siguiente manera:

/**
 * Verificar si Some Plugin está activo
 **/
if ( in_array( 'some-plugin/some-plugin.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    // Coloca aquí el código de tu plugin
}
30 nov 2020 13:50:11
0

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

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

Encontré esta solución en codebangers.com

3 jun 2014 17:57:33
0

Me encanta la solución rápida y sucia:

if (in_array('some-plugin', (array) get_option('active_plugins', array()))) {
       // ... hacer algo
}
26 mar 2025 11:22:41