Come Ottenere Dinamicamente il Numero di Versione di un Plugin

25 mag 2011, 22:45:28
Visualizzazioni: 25.8K
Voti: 16

Salve, di recente ho preso spunto da W3TC per implementare una visualizzazione della lista dei cambiamenti "durante l'aggiornamento" (molto interessante) nel mio plugin, ma c'è un pezzo di codice scomodo che preferirei evitare.

Se guardi all'inizio di questo file, vedrai il seguente codice:

define ( 'BMLT_CURRENT_VERSION', '2.1.16' ); // Questo deve essere mantenuto sincronizzato con la versione sopra.

Bleah. :P

Questo deve essere mantenuto aggiornato, in modo che la funzione possa confrontare la differenza tra il tuo plugin e la versione stabile corrente.

Ho esaminato il Codex e non l'ho trovato, ma ci DEVE essere una funzione API per ottenere la versione di un plugin.

Qualche suggerimento?

0
Tutte le risposte alla domanda 6
5
22

Esiste una funzione chiamata get_plugin_data(). Prova a chiamarla dal file principale del plugin se ne hai bisogno:

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

Ma come detto nelle risposte alle altre domande, è meglio per le prestazioni definire semplicemente una variabile PHP come stai facendo.

25 mag 2011 23:18:18
Commenti

Grazie! Spero che le prestazioni non siano un grosso problema, visto che viene chiamato solo una volta e coinvolge una chiamata curl. Mi sono appena trovato nei guai per avere multiple copie del numero di versione sparse ovunque.

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

sembra non funzionare. Ricevo questo avviso Call to undefined function get_plugin_data().

Ari Ari
5 dic 2013 09:53:10

@AriSusanto Stai provando a usarlo sul front end? Le funzioni di amministrazione dei plugin di WP sono definite solo nella sezione admin. Se hai bisogno di usarlo sul front end dovrai includere il file wp-admin/includes/plugin.php.

goldenapples goldenapples
7 dic 2013 01:01:31

No, lo uso nel pannello di amministrazione.

Ari Ari
7 dic 2013 04:56:32

Se hai l'errore "undefined", puoi usare la funzione get_plugin_data. Per quanto riguarda le prestazioni, ho aggiunto un commento qui: 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 gen 2018 23:06:17
2
21

Un'alternativa a get_plugin_data() è la funzione get_file_data() che è disponibile senza il sovraccarico di caricare file aggiuntivi.

Basta aggiungere questo nel tuo file principale del plugin:

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

Internamente get_file_data esegue una scansione intelligente per essere molto performante.

E se necessario definisci la tua costante:

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

Immagino che per le prestazioni sia anche meglio scrivere manualmente il numero di versione? (come spiegato qui: 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 lug 2019 17:00:58

@baptx sì, comunque, questa è un'ottimizzazione che sarebbe trascurabile considerando tutto ciò che Wordpress fa ad ogni richiesta. In altre parole, non ha importanza

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

Ecco una risposta con del codice che farà ciò che desideri: Esiste un modo per un plugin di ottenere il proprio numero di versione?

25 mag 2011 22:59:53
0

Proprio come la funzione wp_get_theme(), esiste la funzione get_plugin_data() che restituisce i dati del plugin come nome, versione, descrizione, autore, ecc...

Prima di chiamare la funzione, assicurati che sia disponibile, altrimenti riceverai l'errore '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'] : 'Nome Plugin' );
define( 'BMLT_CURRENT_VERSION', ($plugin_data && $plugin_data['Version']) ? $plugin_data['Version'] : '1.0.0' );
20 ago 2021 02:19:55
0

Una possibile soluzione può essere l'uso di regex:

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

È importante menzionare che questa regex è leggermente più veloce di get_file_data() ma in generale non si noterà la differenza.

20 apr 2019 12:18:41
0

Puoi definire una costante nel file php principale del tuo plugin.

define ('MY_PLUGIN_VERSION', '1.0');

Poi se vuoi visualizzare la versione nelle pagine successive all'interno della cartella del tuo plugin, usa semplicemente:

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

Non dimenticare di sostituire 'MY_PLUGIN' con il nome effettivo del tuo plugin

11 lug 2021 10:54:30