Vreau să obțin dinamic numărul versiunii unui plugin
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?
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.

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.

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

@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
.

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

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

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)

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?

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

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ă.

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.
