Как динамически получить номер версии плагина
Привет, недавно я адаптировал W3TC для реализации отображения списка изменений "во время обновления" (очень круто) в моем плагине, но есть неудобный фрагмент кода, которого я хотел бы избежать.
Если посмотреть в начало этого файла, вы увидите следующий код:
define ( 'BMLT_CURRENT_VERSION', '2.1.16' ); // Это нужно поддерживать синхронизированным с версией выше.
Фу. :P
Это нужно постоянно обновлять, чтобы функция могла определять разницу между вашим плагином и текущей стабильной версией.
Я просмотрел Codex и не смог найти, но ДОЛЖНА же быть API-функция для получения версии плагина.
Есть какие-нибудь подсказки?
Есть функция под названием get_plugin_data(). Вызовите её из главного файла плагина, если нужно:
$plugin_data = get_plugin_data( __FILE__ );
$plugin_version = $plugin_data['Version'];
Но, как уже говорилось в ответах на другой вопрос, для производительности лучше просто определить PHP-переменную, как вы и делаете.

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

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

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

Если у вас возникает ошибка 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

Альтернативой функции 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 );

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

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

Так же, как и функция 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' );

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

Вы можете определить константу в основном PHP-файле вашего плагина.
define ('MY_PLUGIN_VERSION', '1.0');
Затем, если вы хотите вывести версию на последующих страницах внутри папки вашего плагина, просто используйте:
<?php echo('MY_PLUGIN_VERSION'); ?>
Не забудьте заменить 'MY_PLUGIN' на фактическое название вашего плагина
