La funzione is_plugin_active non esiste
Sto usando WordPress 3.0.5 e ho fatto test con 3.1rc4. Nel file PHP principale del mio plugin, quando provo a chiamare is_plugin_active ottengo Call to undefined function is_plugin_active()
. Posso chiamare add_action e add_filter. Cosa dovrei controllare/modificare per risolvere questo problema?
Questo sta accadendo all'interno dell'area amministrativa nella pagina Plugin. All'inizio del mio file principale del plugin ho, if (function_exists('is_plugin_active')) {
che restituisce sempre false.
Inoltre non riesco a vedere le funzioni dal mio file principale del plugin in altri plugin (se questo può essere d'aiuto).

Questo accade perché il file in cui è definita la funzione is_plugin_active() - wp-admin/includes/plugin.php
- viene caricato solo nell'area amministrativa, dopo che il tuo plugin è stato caricato.
Pertanto, puoi chiamarla solo dopo che l'azione 'admin_init' è stata eseguita:
function check_some_other_plugin() {
if ( is_plugin_active('some-plugin.php') ) {
...
}
}
add_action( 'admin_init', 'check_some_other_plugin' );

Puoi chiamare is_plugin_active() nei template e anche dalle pagine utente, il che può essere utile per plugin correlati (ad esempio, richiedere che il plugin 'xyz' sia attivo per far funzionare il mio nuovo plugin). È necessario includere manualmente il file plugin.php come indicato nella documentazione di is_plugin_active() sul Codex.
Ecco un esempio funzionale che utilizzo nei miei pacchetti aggiuntivi premium per assicurarmi che il plugin base gratuito sia attivo prima di invocare un oggetto aggiuntivo. Richiede che determinati hook e filtri siano disponibili nel plugin base, altrimenti si verificherà un crash.
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;
}
Come nota a margine, se hai problemi con is_plugin_active() quando sei loggato come amministratore, è probabile perché stai testando prima che admin_init venga eseguito. admin_menu viene eseguito prima di admin_init e fare test in admin_menu mi ha "morso" in passato. Il nome "admin_init" mi sembra controintuitivo visto che admin_menu è già stato eseguito. Penso a init come "la prima cosa da eseguire"... forse admin_kinda_init() sarebbe stato meglio. :)

Una soluzione rapida e sporca sarebbe duplicare manualmente la funzione:
if ( ! function_exists( 'is_plugin_active' ) ) {
function is_plugin_active( $plugin ) {
return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
}
È abbastanza breve quindi non dovrebbe essere troppo difficile implementarla nel tuo codice come soluzione alternativa.

Semplice e facile. Preso da WP
if ( ! function_exists( 'is_plugin_active' ) )
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
e poi qualsiasi istanza di
if ( is_plugin_active( 'feed-them-social/feed-them.php' ) ) {
}
ottieni il controllo della funzione. Quindi niente più errori.

Ho preferito la risposta di Tom Auger su come definire la tua funzione is_plugin_active invece di includere plugin.php. Tuttavia, utilizzare lo stesso nome della funzione ha causato il crash dell'area di amministrazione. Usare un nome diverso per la funzione ha risolto il problema:
function is_plugin_active_byme( $plugin ) {
return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}

Stai utilizzando is_plugin_active
all'interno dell'area di amministrazione o nel front-end? Sono abbastanza sicuro che is_plugin_active
sia una funzione disponibile solo nell'admin e si trova all'interno di wp-admin/includes/plugin.php.
Inoltre, il tuo file principale del plugin utilizza l'Intestazione File di WordPress? Il tuo plugin viene incluso dopo che il file plugin.php sopra menzionato è stato caricato?

Se stai utilizzando Elementor e riscontri il problema solo nel frontend mentre funziona correttamente nella vista editor.
Puoi utilizzare la funzione is_edit_mode()
di Elementor, in modo che la condizione venga eseguita solo nella vista editor.
if ( \Elementor\Plugin::$instance->editor->is_edit_mode() && is_plugin_active('some-plugin.php') ) {
return true;
} else {
return false;
}

Nessuna di queste soluzioni ha funzionato per me, ma questa sì:
include_once('wp-admin/includes/plugin.php');
Ho trovato questa soluzione su codebangers.com
