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


10

До речі, я нещодавно заробив W3TC, щоб впровадити в свій плагін дисплей списку змін (дуже здорово) , але є незручний біт коду, якого я вважаю за краще уникати.

Якщо ви подивитесь у верхній частині цього файлу , ви побачите такий код:

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

Ick. : P

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

Я вивчив Codex і не можу його знайти, але GOT має функцію API для отримання версії плагіна.

Будь-які підказки?

Відповіді:



14

Існує функція, яка називається get_plugin_data () . Спробуйте зателефонувати цьому з головного файла плагіна, якщо вам потрібно:

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

Але як сказано у відповідях на інше питання, для його продуктивності краще просто визначити змінну PHP, як ви це робите.


Дякую! Сподіваємось, продуктивність не буде великою справою, оскільки це називається лише один раз і передбачає виклик із завитками. Щойно у мене виникли проблеми з тим, що у всіх місцях є кілька копій номера версії
Кріс Маршалл

1
це, здається, не працює. Я отримую це попередження Call to undefined function get_plugin_data().
Арі

@AriSusanto Ви намагаєтесь використовувати його на передній частині? Функції адміністрування плагінів WP визначені лише в розділі адміністратора. Якщо вам потрібно використовувати це на передньому кінці, вам доведеться включити файл wp-admin/includes/plugin.php.
goldenapples

Ні, я використовую його на панелі адміністрування.
Арі

Якщо у вас є невизначена помилка, ви можете скористатися функцією 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.