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?

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.


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 );

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.