Как динамически получить номер версии плагина

25 мая 2011 г., 22:45:28
Просмотры: 25.8K
Голосов: 16

Привет, недавно я адаптировал W3TC для реализации отображения списка изменений "во время обновления" (очень круто) в моем плагине, но есть неудобный фрагмент кода, которого я хотел бы избежать.

Если посмотреть в начало этого файла, вы увидите следующий код:

define ( 'BMLT_CURRENT_VERSION', '2.1.16' ); // Это нужно поддерживать синхронизированным с версией выше.

Фу. :P

Это нужно постоянно обновлять, чтобы функция могла определять разницу между вашим плагином и текущей стабильной версией.

Я просмотрел Codex и не смог найти, но ДОЛЖНА же быть API-функция для получения версии плагина.

Есть какие-нибудь подсказки?

0
Все ответы на вопрос 6
5
22

Есть функция под названием get_plugin_data(). Вызовите её из главного файла плагина, если нужно:

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

Но, как уже говорилось в ответах на другой вопрос, для производительности лучше просто определить PHP-переменную, как вы и делаете.

25 мая 2011 г. 23:18:18
Комментарии

Спасибо! Надеюсь, производительность не будет проблемой, так как этот код вызывается только один раз и включает вызов curl. Я уже попадал в неприятности из-за того, что версия была раскидана в нескольких местах.

Chris Marshall Chris Marshall
25 мая 2011 г. 23:36:39

Кажется, это не работает. Я получаю предупреждение Call to undefined function get_plugin_data().

Ari Ari
5 дек. 2013 г. 09:53:10

@AriSusanto Вы пытаетесь использовать это на фронтенде? Функции администрирования плагинов WP определены только в административной части. Если вам нужно использовать это на фронтенде, вам придется подключить файл wp-admin/includes/plugin.php.

goldenapples goldenapples
7 дек. 2013 г. 01:01:31

Нет, я использую его в панели администратора.

Ari Ari
7 дек. 2013 г. 04:56:32

Если у вас возникает ошибка undefined, вы можете использовать функцию get_plugin_data. По поводу производительности, я добавил комментарий здесь: https://wordpress.stackexchange.com/questions/361/is-there-a-way-for-a-plug-in-to-get-its-own-version-number/371#comment430477_367

baptx baptx
11 янв. 2018 г. 23:06:17
2
21

Альтернативой функции 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 );
12 нояб. 2017 г. 03:27:27
Комментарии

Полагаю, для производительности также лучше указывать номер версии вручную? (как объяснено здесь: https://wordpress.stackexchange.com/questions/361/is-there-a-way-for-a-plug-in-to-get-its-own-version-number/367#367)

baptx baptx
18 июл. 2019 г. 17:00:58

@baptx да, однако эта оптимизация была бы незначительной по сравнению со всем остальным, что WordPress делает при каждом запросе. Другими словами, это не имеет значения

paulcol. paulcol.
14 авг. 2019 г. 01:19:26
0

Вот ответ с кодом, который сделает то, что вам нужно: Есть ли способ для плагина получить собственный номер версии?

25 мая 2011 г. 22:59:53
0

Так же, как и функция wp_get_theme(), существует функция get_plugin_data(), которая возвращает данные плагина, например название, версию, описание, автора и т.д...

Перед вызовом функции убедитесь, что она доступна, иначе вы получите ошибку 'call to undefined function'.

if( ! function_exists('get_plugin_data') ){
    require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
}
$plugin_data = get_plugin_data( __FILE__, false );

define( 'BMLT_NAME', ($plugin_data && $plugin_data['Name']) ? $plugin_data['Name'] : 'Plugin Name' );
define( 'BMLT_CURRENT_VERSION', ($plugin_data && $plugin_data['Version']) ? $plugin_data['Version'] : '1.0.0' );
20 авг. 2021 г. 02:19:55
0

Одним из возможных решений может быть регулярное выражение:

$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(), но в большинстве случаев разница будет незаметна.

20 апр. 2019 г. 12:18:41
0

Вы можете определить константу в основном PHP-файле вашего плагина.

define ('MY_PLUGIN_VERSION', '1.0');

Затем, если вы хотите вывести версию на последующих страницах внутри папки вашего плагина, просто используйте:

<?php echo('MY_PLUGIN_VERSION'); ?>

Не забудьте заменить 'MY_PLUGIN' на фактическое название вашего плагина

11 июл. 2021 г. 10:54:30