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

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, как вы делаете.

goldenapples
источник
Спасибо! Надеемся, что производительность не будет иметь большого значения, так как она вызывается только один раз и включает вызов 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 );
paulcol.
источник
Полагаю, для производительности лучше также написать номер версии вручную? (как объяснено здесь: 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()но в целом вы этого не заметите.

Ивиян Стефан Стипич
источник