9

Howdy, I recently cribbed W3TC to implement an "in-update" changelist display (very cool), in my plugin, but there's an awkward bit of code I'd prefer to avoid.

If you look at the top of this file, you'll see the following code:

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

Ick. :P

That needs to be kept up to date, so the function can delta between your plugin, and the current stable version.

I have perused the Codex, and can't find it, but there has GOT to be an API function for getting the version of a plugin.

Any clues?

3

Here is an answer with some code that will do what you want it to do: Is there a way for a plug-in to get it's own version number?

13

There is a function called get_plugin_data(). Try calling this from within the main plugin file if you need to:

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

But as is said in the answers to the other question, its better for performance to just define a PHP variable as you're doing.

  • Thanks! Hopefully, performance won't be a big deal, as this is only called once, and involves a curl call. I have just gotten into trouble from having multiple copies of the version number all over the place. – Chris Marshall May 25 '11 at 20:36
  • 1
    it doesn't seem to work. I get this warning Call to undefined function get_plugin_data(). – Ari Dec 5 '13 at 7:53
  • @AriSusanto Are you trying to use it on the front end? The WP plugin administration functions are only defined in the admin section. If you need to use this on the front end you'll have to include the file wp-admin/includes/plugin.php. – goldenapples Dec 6 '13 at 23:01
  • No, I use it on administration panel. – Ari Dec 7 '13 at 2:56
  • If you have the undefined error, you can use get_plugin_data function. For the perfomance, I added a comment here: wordpress.stackexchange.com/questions/361/… – baptx Jan 11 '18 at 21:06
9

An alternative to get_plugin_data() is get_file_data() which is available without the overhead of loading additional files.

Simply add this to your main plugin file:

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

Under the hood get_file_data does some cleaver scanning to be quite performant.

And if needed define your constant:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );
  • I guess for performance it is also better to write the version number manually? (like explained here: wordpress.stackexchange.com/questions/361/…) – baptx Jul 18 at 14:00
  • @baptx yes, however, this is one optimization would be negligible considering everything else Wordpress does on every request. In other words, it doesn't matter – paulcol. Aug 13 at 22:19
1

One possible solution can be regex:

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

Must mention that this regex is a bit faster than get_file_data() but in the general you will not notice it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.