La funzione is_plugin_active non esiste

15 feb 2011, 01:59:14
Visualizzazioni: 36K
Voti: 31

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

5
Commenti

Non sono sicuro dalla tua descrizione - se si tratta di un problema con il plugin attivato o se stai cercando di fare qualcosa durante l'attivazione o in altre condizioni specifiche?

Rarst Rarst
15 feb 2011 21:15:59

Ho scoperto che function_exists('is_plugin_active') restituisce false quando viene chiamata dal file principale del plugin se esterna a un metodo, ma restituisce true quando viene chiamata all'interno del metodo richiamato dall'azione activated_plugin.

Carl Carl
16 feb 2011 05:36:06

Su quale pagina vedi l'errore? La pagina dei plugin (wp-admin/plugins.php)? Questo avviene prima o dopo aver attivato il plugin in questione?
Rarst fa un'osservazione valida. Sai a che punto stai chiamando la funzione all'interno di WordPress?

Jonnybojangles Jonnybojangles
16 feb 2011 21:58:30

Vedo l'errore su wp-admin/plugins.php dopo aver attivato il plugin. Ho inserito il controllo in alcuni dei metodi collegati come azioni e lì funziona. Sembra che abbia a che fare con l'ordine di inclusione.

Carl Carl
17 feb 2011 01:37:40

I plugin vengono caricati in ordine alfabetico, quindi potrebbe semplicemente essere che il tuo plugin non venga elaborato abbastanza presto. Prova a rinominare il tuo plugin in modo che inizi con la lettera a (es. a_mioplugin-nome) in modo che venga caricato prima. L'opzione migliore, tuttavia, sarebbe chiamare il tuo blocco function_exists all'interno di una funzione che viene eseguita dopo il caricamento dei plugin. Puoi vedere l'ordine approssimativo di esecuzione sul WP codex: https://codex.wordpress.org/Plugin_API/Action_Reference

Phill Healey Phill Healey
19 feb 2019 21:07:04
Tutte le risposte alla domanda 11
2
45

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' );
15 feb 2011 03:12:53
Commenti

Se sono già nell'area di amministrazione, c'è qualcosa che potrebbe essere configurato in modo errato e che mi impedirebbe l'accesso a questo?

Carl Carl
15 feb 2011 16:03:48

Vedi risposta aggiornata.

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

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

26 feb 2013 20:45:06
Commenti

Aggiungere include_once(ABSPATH.'wp-admin/includes/plugin.php'); ha funzionato per me. Grazie!

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

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.

30 apr 2011 02:14:42
2

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.

15 lug 2014 01:34:40
Commenti

Se stai usando requireonce probabilmente non hai bisogno di verificare la funzione... ?

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

Lo fai per assicurarti che il plugin sia definito prima di provare a usarlo, altrimenti potresti incontrare problemi più avanti.

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

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() ) );
}
3 ott 2015 12:19:18
Commenti

Sono d'accordo. Anche se puoi verificare i conflitti nella dichiarazione della tua funzione, WP non lo fa e quindi il tuo WP genererà un errore.

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

Per eseguire il debug dei plugin attivi:

var_dump(get_option(...));

Per verificare un plugin specifico:

in_array(get_option(...));

L'azione si chiama "active_plugins" se non ricordo male (IIRC).

15 feb 2011 02:46:44
1

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?

15 feb 2011 03:23:15
Commenti

Questo sta accadendo all'interno dell'area di amministrazione nella pagina Plugin. Il plugin ha l'header file WP suggerito. Come posso verificare se il plugin viene incluso dopo plugin.php?

Carl Carl
15 feb 2011 16:02:40
0

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;
}
29 ott 2020 10:11:58
0

Puoi verificare se un plugin è attivo nel seguente modo:

/**
 * Verifica se Some Plugin è attivo
 **/
if ( in_array( 'some-plugin/some-plugin.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    // Inserisci qui il codice del tuo plugin
}
30 nov 2020 13:50:11
0

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

3 giu 2014 17:57:33
0

Amo la soluzione rapida e sporca:

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