La función is_plugin_active no existe
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).

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

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. :)

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.

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.

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() ) );
}

¿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?

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;
}

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
}

Ninguna de estas soluciones funcionó para mí, pero esto sí:
include_once('wp-admin/includes/plugin.php');
Encontré esta solución en codebangers.com
