Je veux obtenir un numéro de version de plugin de manière dynamique

10

Howdy, j'ai récemment ajouté W3TC pour implémenter un affichage de liste de modifications "en cours de mise à jour" (très cool), dans mon plugin , mais il y a un peu maladroit de code que je préférerais éviter.

Si vous regardez en haut de ce fichier , vous verrez le code suivant:

define ( 'BMLT_CURRENT_VERSION', '2.1.16' ); // This needs to be kept in synch with the version above.

Ick. : P

Cela doit être mis à jour, afin que la fonction puisse faire un delta entre votre plugin et la version stable actuelle.

J'ai parcouru le Codex, et je ne le trouve pas, mais il y a GOT pour être une fonction API pour obtenir la version d'un plugin.

Des indices?

Chris Marshall
la source

Réponses:

14

Il existe une fonction appelée get_plugin_data () . Essayez d'appeler cela depuis le fichier du plugin principal si vous avez besoin de:

$plugin_data = get_plugin_data( __FILE__ );
$plugin_version = $plugin_data['Version'];

Mais comme cela est dit dans les réponses à l'autre question, il vaut mieux pour les performances de simplement définir une variable PHP comme vous le faites.

pommes dorées
la source
Merci! Espérons que la performance ne sera pas un gros problème, car elle n'est appelée qu'une seule fois et implique un appel en boucle. Je viens d'avoir des ennuis d'avoir plusieurs copies du numéro de version partout.
Chris Marshall
1
cela ne semble pas fonctionner. Je reçois cet avertissement Call to undefined function get_plugin_data().
Ari
@AriSusanto Essayez-vous de l'utiliser sur le front-end? Les fonctions d'administration du plugin WP ne sont définies que dans la section admin. Si vous devez l'utiliser sur le front-end, vous devrez inclure le fichier wp-admin/includes/plugin.php.
goldenapples
Non, je l'utilise sur le panneau d'administration.
Ari
Si vous avez l'erreur non définie, vous pouvez utiliser la fonction get_plugin_data. Pour la performance, j'ai ajouté un commentaire ici: wordpress.stackexchange.com/questions/361/…
baptx
9

Une alternative à get_plugin_data()est get_file_data () qui est disponible sans la surcharge de chargement de fichiers supplémentaires.

Ajoutez simplement ceci à votre fichier de plugin principal:

$plugin_data = get_file_data(__FILE__, array('Version' => 'Version'), false);
$plugin_version = $plugin_data['Version'];

Sous le capot, get_file_dataun balayage de couperet est assez performant.

Et si besoin, définissez votre constante:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );
paulcol.
la source
Je suppose que pour les performances, il est également préférable d'écrire le numéro de version manuellement? (comme expliqué ici: wordpress.stackexchange.com/questions/361/… )
baptx
@baptx oui, cependant, c'est une optimisation qui serait négligeable compte tenu de tout le reste que Wordpress fait à chaque demande. En d'autres termes, cela n'a pas d'importance
Paulcol.
1

Une solution possible peut être l'expression régulière:

$plugin_version = NULL;
if(preg_match('/\*[\s\t]+?version:[\s\t]+?([0-9.]+)/i',file_get_contents( __FILE__ ), $v))
    $plugin_version = $v[1];

Il faut mentionner que ce regex est un peu plus rapide que get_file_data()mais en général vous ne le remarquerez pas.

Ivijan Stefan Stipić
la source