is_plugin_active La fonction n'existe pas

10

J'utilise WordPress 3.0.5 et l'ai testé avec 3.1rc4. Dans le fichier PHP principal de mon plugin, lorsque j'essaie d'appeler is_plugin_active, je reçois Call to undefined function is_plugin_active() . Je peux appeler add_action et add_filter. Que dois-je vérifier / modifier pour résoudre ce problème?

Cela se passe à l'intérieur de l'administrateur sur la page Plugins. Au sommet de mon fichier de plugin principal, if (function_exists('is_plugin_active')) { renvoie toujours faux.

Je ne vois pas non plus les fonctions de mon fichier de plugin principal dans les autres plugins (si cela peut vous aider).

    
posée Carl 15.02.2011 - 00:59

8 réponses

21

Cela s'explique par le fait que le fichier dans lequel is_plugin_active () est défini - wp-admin/includes/plugin.php - n'est chargé que dans l'administrateur, une fois votre plugin chargé.

Ainsi, vous ne pourrez l'appeler qu'après le déclenchement de 'admin_init':

function check_some_other_plugin() {
  if ( is_plugin_active('some-plugin.php') ) {
    ...
  }
}
add_action( 'admin_init', 'check_some_other_plugin' );
    
réponse donnée scribu 15.02.2011 - 02:12
8

Vous pouvez appeler is_plugin_active () dans les modèles et à partir des pages utilisateur également, ce qui peut être utile pour les plugins associés (c.-à-d. nécessiter le plugin 'xyz' pour utiliser mon nouveau plugin). Vous devez inclure manuellement le fichier plugin.php comme indiqué dans la documentation is_plugin_active () du Codex.

Voici un exemple fonctionnel que j'utilise dans mes packs d'add-on premium pour m'assurer que le plug-in de base libre est actif avant d'appeler un objet add-on. Il nécessite certains crochets et les filtres doivent être disponibles dans le plugin de base ou il va planter.

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

En passant, si vous rencontrez des problèmes avec is_plugin_active () à partir d'une connexion active, cela est probablement dû au fait que vous testez avant le lancement de admin_init. admin_menu se déclenche avant admin_init et des tests dans admin_menu m'ont déjà "mordu". Le nom "admin_init" qui me semble contre-intuitif puisque admin_menu est déjà lancé. Je pense à init comme étant "la première chose à exécuter" ... peut-être que admin_kinda_init () serait mieux. :)

    
réponse donnée Lance Cleveland 26.02.2013 - 19:45
8

Une solution de contournement rapide et incorrecte consisterait à dupliquer la fonction manuellement:

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

Il est assez court, il ne devrait donc pas être trop difficile à implémenter dans votre propre code comme solution de contournement.

    
réponse donnée Tom Auger 30.04.2011 - 01:14
4

Simple et facile. Tiré de WP

if ( ! function_exists( 'is_plugin_active' ) )
     require_once( ABSPATH . '/wp-admin/includes/plugin.php' );

puis toutes les instances de

 if ( is_plugin_active( 'feed-them-social/feed-them.php' ) ) {

   }

obtenir le contrôle de la fonction. SO plus d’erreurs.

    
réponse donnée Spencer Labadie 15.07.2014 - 00:34
3

J'ai préféré la réponse de Tom Auger sur la manière de définir votre propre fonction is_plugin_active au lieu d'inclure plugin.php. Cependant, l'utilisation du même nom de fonction a provoqué le blocage de mon domaine d'administration. L'utilisation d'un nom de fonction différent a résolu le problème:

function is_plugin_active_byme( $plugin ) {
    return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
    
réponse donnée Jeroen 03.10.2015 - 11:19
1

Utilisez-vous is_plugin_active à l'intérieur de l'admin ou du front-end? Je suis à peu près sûr que is_plugin_active n'est qu'une fonction d'administration qui se trouve dans wp-admin / includes / plugin.php.

De plus, votre fichier de plugin principal utilise-t-il En-tête de fichier Wordpress ? Votre plugin est-il inclus après le chargement du fichier plugin.php ci-dessus?

    
réponse donnée Jonnybojangles 15.02.2011 - 02:23
1

Pour déboguer les plugins actifs:

var_dump(get_option(...));

Pour rechercher un plugin spécifique:

in_array(get_option(...));

L'action s'appelle " active_plugins " IIRC.

    
réponse donnée hakre 15.02.2011 - 01:46
0

Aucune de ces solutions n'a fonctionné pour moi, mais cela a fonctionné:

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

J'ai trouvé cette solution sur codebangers.com

    
réponse donnée fenderflip 03.06.2014 - 16:57

Lire d'autres questions sur les étiquettes