Estoy usando WordPress 3.0.5 y lo he probado con 3.1rc4. En el archivo PHP principal de mi complemento, cuando intento llamar a is_plugin_active me sale Call to undefined function is_plugin_active()
. Puedo llamar a add_action y add_filter. ¿Qué debo verificar / cambiar para solucionar esto?
Esto está sucediendo dentro del administrador en la página de Complementos. En la parte superior de mi archivo de complemento principal que tengo, 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 a alguno).
function_exists('is_plugin_active')
es falso cuando se llama desde el archivo de complemento principal si está fuera de un método, pero es verdadero cuando se llama dentro del método que se llama para laactivated_plugin
acción.Respuestas:
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 cargar el complemento.Por lo tanto, solo puede llamarlo después de que 'admin_init' se haya disparado:
fuente
Puede llamar a is_plugin_active () en plantillas y también desde páginas de usuario, lo que puede ser útil para 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.
Aquí hay un ejemplo funcional que uso en mis paquetes de complementos premium para asegurarme de que el complemento base gratuito esté activo antes de invocar un objeto de complemento. Requiere que ciertos ganchos y filtros estén disponibles en el complemento base o se bloqueará.
Por otro lado, si tiene problemas con is_plugin_active () desde un inicio de sesión de administrador activo, es probable que esté probando antes de que se active admin_init. admin_menu se dispara antes de admin_init y hacer pruebas en admin_menu me ha "mordido" antes. El nombre "admin_init" que me parece contrario a la intuición ya que admin_menu ya está ejecutado. Pienso en init como "lo primero que se debe ejecutar" ... tal vez admin_kinda_init () sería mejor. :)
fuente
include_once(ABSPATH.'wp-admin/includes/plugin.php');
hizo el truco para mí. ¡Gracias!Una solución rápida y sucia sería duplicar la función manualmente:
Es bastante corto, por lo que no debería ser demasiado difícil de implementar en su propio código como solución alternativa.
fuente
Simple y fácil. Tomado de WP
y luego cualquier instancia de
obtener la verificación de funcionamiento. Así que no más errores.
fuente
requireonce
, probablemente no necesite verificar la función ...?Preferí la respuesta de Tom Auger con cómo definir su propia función is_plugin_active en lugar de incluir plugin.php. Sin embargo, usar el mismo nombre de función causó que mi área de administración se bloqueara. Usando un nombre de función diferente lo resolvió:
fuente
¿Está utilizando
is_plugin_active
dentro del administrador o el front-end? Estoy bastante seguro de queis_plugin_active
solo es una función de administrador que se encuentra dentro de wp-admin / includes / plugin.php.Además, ¿su archivo de complemento principal utiliza el Encabezado de archivo de Wordpress ? ¿Se incluye su complemento después de cargar el archivo plugin.php anterior?
fuente
Para depurar complementos activos:
Para buscar un complemento específico:
La acción se llama "
active_plugins
" IIRC.fuente
Ninguna de estas soluciones funcionó para mí, pero esto sí:
Encontré esta solución en codebangers.com
fuente