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


10

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

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

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

Ик. :П

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

Я просмотрел Кодекс и не могу его найти, но есть ПОЛУЧИТЬ функцию API для получения версии плагина.

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

Ответы:



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 определены только в разделе администратора. Если вам нужно использовать это на внешнем интерфейсе, вам нужно будет включить файл wp-admin/includes/plugin.php.
Золотые яблоки

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

Если у вас есть неопределенная ошибка, вы можете использовать функцию 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 делает для каждого запроса. Другими словами, это не имеет значения
Полколь.

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()но в целом вы этого не заметите.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.