Chcę dynamicznie uzyskać numer wersji wtyczki

10

Cześć, niedawno przekopałem W3TC, aby zaimplementować w mojej wtyczce „listę aktualizacji” (bardzo fajną) , ale jest trochę niezręczny kod, którego wolałbym unikać.

Jeśli spojrzysz na górę tego pliku , zobaczysz następujący kod:

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

Ick. : P

Należy to aktualizować, aby funkcja mogła różnicować między wtyczką a bieżącą stabilną wersją.

Przeczytałem Kodeks i nie mogę go znaleźć, ale GOT ma funkcję API do pobierania wersji wtyczki.

Jakieś wskazówki?

Chris Marshall
źródło

Odpowiedzi:

14

Istnieje funkcja o nazwie get_plugin_data () . Spróbuj wywołać to z głównego pliku wtyczki, jeśli chcesz:

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

Ale jak powiedziano w odpowiedziach na inne pytanie, lepiej jest po prostu zdefiniować zmienną PHP podczas pracy.

Złote Jabłka
źródło
Dzięki! Mamy nadzieję, że wydajność nie będzie wielkim problemem, ponieważ jest to wywoływane tylko raz i wymaga zawinięcia. Właśnie wpadłem w kłopoty z powodu posiadania wielu kopii numeru wersji w dowolnym miejscu.
Chris Marshall,
1
wydaje się, że nie działa. Dostaję to ostrzeżenie Call to undefined function get_plugin_data().
Ari
@AriSusanto Czy próbujesz użyć go w interfejsie? Funkcje administracyjne wtyczek WP są zdefiniowane tylko w sekcji admin. Jeśli musisz użyć tego na interfejsie, musisz dołączyć plik wp-admin/includes/plugin.php.
goldenapples,
Nie, używam go w panelu administracyjnym.
Ari
Jeśli masz niezdefiniowany błąd, możesz użyć funkcji get_plugin_data. Dla wykonania dodałem tutaj komentarz: wordpress.stackexchange.com/questions/361/…
baptx 11.01.18
9

Alternatywą get_plugin_data()jest get_file_data (), która jest dostępna bez obciążenia związanego z ładowaniem dodatkowych plików.

Po prostu dodaj to do głównego pliku wtyczki:

$plugin_data = get_file_data(__FILE__, array('Version' => 'Version'), false);
$plugin_version = $plugin_data['Version'];

Pod maską get_file_dataskanuje się tasak, aby być dość wydajnym.

W razie potrzeby zdefiniuj swoją stałą:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );
Paulcol.
źródło
Wydaje mi się, że dla wydajności lepiej jest napisać numer wersji ręcznie? (jak wyjaśniono tutaj: wordpress.stackexchange.com/questions/361/... )
baptx
@baptx tak, jednak jest to jedna optymalizacja byłaby znikoma biorąc pod uwagę wszystko, co Wordpress robi na każde żądanie. Innymi słowy, to nie ma znaczenia
Paulcol.
1

Jednym z możliwych rozwiązań może być wyrażenie regularne:

$plugin_version = NULL;
if(preg_match('/\*[\s\t]+?version:[\s\t]+?([0-9.]+)/i',file_get_contents( __FILE__ ), $v))
    $plugin_version = $v[1];

Trzeba wspomnieć, że regex jest nieco szybszy niż, get_file_data()ale generalnie go nie zauważysz.

Ivijan Stefan Stipić
źródło