Vreau să obțin dinamic numărul versiunii unui plugin

25 mai 2011, 22:45:28
Vizualizări: 25.8K
Voturi: 16

Salut, recent am adaptat W3TC pentru a implementa afișarea unei liste de modificări "în timpul actualizării" (foarte tare) în plugin-ul meu, dar există o porțiune de cod stângace pe care aș prefera să o evit.

Dacă te uiți în partea de sus a acestui fișier, vei vedea următorul cod:

define ( 'BMLT_CURRENT_VERSION', '2.1.16' ); // Aceasta trebuie să fie sincronizată cu versiunea de mai sus.

Urât. :P

Aceasta trebuie menținută actualizată, astfel încât funcția să poată determina diferența dintre plugin-ul tău și versiunea stabilă curentă.

Am căutat prin Codex și nu am găsit, dar TREBUIE să existe o funcție API pentru obținerea versiunii unui plugin.

Aveți vreo sugestie?

0
Toate răspunsurile la întrebare 6
5
22

Există o funcție numită get_plugin_data(). Încearcă să o apelezi din fișierul principal al plugin-ului dacă ai nevoie:

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

Dar așa cum se menționează în răspunsurile la cealaltă întrebare, este mai bine pentru performanță să definești direct o variabilă PHP așa cum faci tu.

25 mai 2011 23:18:18
Comentarii

Mulțumesc! Sper că performanța nu va fi o problemă, deoarece această funcție este apelată o singură dată și implică un apel curl. Am avut probleme din cauza faptului că am avut mai multe copii ale numărului de versiune în diverse locuri.

Chris Marshall Chris Marshall
25 mai 2011 23:36:39

Nu pare să funcționeze. primesc această avertizare Call to undefined function get_plugin_data().

Ari Ari
5 dec. 2013 09:53:10

@AriSusanto Încerci să o folosești pe front-end? Funcțiile de administrare a plugin-urilor din WP sunt definite doar în secțiunea de admin. Dacă trebuie să folosești această funcție pe front-end va trebui să incluzi fișierul wp-admin/includes/plugin.php.

goldenapples goldenapples
7 dec. 2013 01:01:31

Nu, îl folosesc în panoul de administrare.

Ari Ari
7 dec. 2013 04:56:32

Dacă aveți eroarea nedefinită, puteți folosi funcția get_plugin_data. Pentru performanță, am adăugat un comentariu aici: https://wordpress.stackexchange.com/questions/361/is-there-a-way-for-a-plug-in-to-get-its-own-version-number/371#comment430477_367

baptx baptx
11 ian. 2018 23:06:17
2
21

O alternativă la get_plugin_data() este get_file_data() care este disponibilă fără suprasolicitarea încărcării fișierelor suplimentare.

Pur și simplu adaugă acest cod în fișierul principal al plugin-ului:

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

În spate, get_file_data face o scanare inteligentă pentru a fi destul de performant.

Și dacă este necesar, definește constanta ta:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );
12 nov. 2017 03:27:27
Comentarii

Presupun că pentru performanță este mai bine să scrii manual numărul versiunii? (cum este explicat aici: https://wordpress.stackexchange.com/questions/361/is-there-a-way-for-a-plug-in-to-get-its-own-version-number/367#367)

baptx baptx
18 iul. 2019 17:00:58

@baptx da, totuși, această optimizare ar fi neglijabilă având în vedere tot ce face Wordpress la fiecare solicitare. Cu alte cuvinte, nu contează

paulcol. paulcol.
14 aug. 2019 01:19:26
0

Iată un răspuns cu niște cod care va face exact ceea ce doriți: Există o modalitate pentru un plugin să-și obțină numărul propriu de versiune?

25 mai 2011 22:59:53
0

La fel ca funcția wp_get_theme(), există și funcția get_plugin_data(). Aceasta returnează datele despre plugin, cum ar fi nume, versiune, descriere, autor, etc...

Înainte de a apela funcția, asigură-te că este disponibilă, altfel vei primi eroarea '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'] : 'Nume Plugin' );
define( 'BMLT_CURRENT_VERSION', ($plugin_data && $plugin_data['Version']) ? $plugin_data['Version'] : '1.0.0' );
20 aug. 2021 02:19:55
0

O posibilă soluție poate fi folosirea expresiilor regulate (regex):

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

Trebuie menționat că această expresie regulată este puțin mai rapidă decât get_file_data(), dar în general diferența nu va fi sesizabilă.

20 apr. 2019 12:18:41
0

Puteți defini o constantă în fișierul principal PHP al plugin-ului dvs.

define ('MY_PLUGIN_VERSION', '1.0');

Apoi, dacă doriți să afișați versiunea în paginile ulterioare din folderul plugin-ului, pur și simplu folosiți:

<?php echo('MY_PLUGIN_VERSION'); ?>

Nu uitați să înlocuiți 'MY_PLUGIN' cu numele real al plugin-ului dvs.

11 iul. 2021 10:54:30