我想动态获取插件版本号


10

嗨,我最近在W3TC上使用了W3TC,以在我的插件中实现“更新中”的更改列表显示(非常酷),但是我想避免使用一些尴尬的代码。

如果查看此文件的顶部,您将看到以下代码:

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

ck :P

需要保持最新状态,以便该功能可以在您的插件和当前的稳定版本之间转换。

我已经仔细阅读了Codex,但找不到它,但是GOT有一个API函数来获取插件的版本。

有什么线索吗?

Answers:



14

有一个名为get_plugin_data()的函数。如果需要,请尝试从主插件文件中调用此命令:

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

但是,正如在另一个问题的答案中所说的那样,在执行操作时仅定义一个PHP变量对于性能而言会更好。


谢谢!希望性能不会有什么大不了的,因为它只被调用一次,并且涉及curl调用。我到处都有版本号的多个副本,这给我带来了麻烦。
克里斯·马歇尔

1
它似乎不起作用。我得到这个警告 Call to undefined function get_plugin_data()
阿里

@AriSusanto您是否打算在前端使用它?WP插件管理功能仅在admin部分中定义。如果您需要在前端使用它,则必须包含该文件wp-admin/includes/plugin.php
goldenapples 2013年

不,我在管理面板上使用它。
2013年

如果您有未定义的错误,则可以使用get_plugin_data函数。对于性能,我在这里添加了评论:wordpress.stackexchange.com/questions/361/…–
baptx

9

一个替代get_plugin_data()get_file_data()这是可用的,而无需装载额外文件的开销。

只需将其添加到您的主插件文件中:

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

引擎盖下的get_file_data某些切割刀扫描性能相当好。

并根据需要定义常量:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );

我想为了提高性能,手动编写版本号也更好吗?(如此处的解释:wordpress.stackexchange.com/questions/361/…
baptx

@baptx是的,但是考虑到Wordpress对每个请求所做的其他一切,这是一个微不足道的优化。换句话说,没关系
paulcol。

1

一种可能的解决方案可以是正则表达式:

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

必须指出的是,此正则表达式的速度比get_file_data()一般正则表达式快一点,但通常您不会注意到它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.