Quiero Obtener el Número de Versión de un Plugin Dinámicamente

25 may 2011, 22:45:28
Vistas: 25.8K
Votos: 16

Hola, recientemente adapté W3TC para implementar una visualización de lista de cambios "durante la actualización" (muy interesante) en mi plugin, pero hay un fragmento de código incómodo que preferiría evitar.

Si miras la parte superior de este archivo, verás el siguiente código:

define ( 'BMLT_CURRENT_VERSION', '2.1.16' ); // Esto necesita mantenerse sincronizado con la versión anterior.

Uf. :P

Esto necesita mantenerse actualizado, para que la función pueda determinar la diferencia entre tu plugin y la versión estable actual.

He revisado el Codex, y no lo encuentro, pero TIENE que haber una función de API para obtener la versión de un plugin.

¿Alguna pista?

0
Todas las respuestas a la pregunta 6
5
22

Existe una función llamada get_plugin_data(). Puedes llamarla desde el archivo principal del plugin si lo necesitas:

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

Pero como se menciona en las respuestas a la otra pregunta, es mejor para el rendimiento simplemente definir una variable PHP como lo estás haciendo.

25 may 2011 23:18:18
Comentarios

¡Gracias! Esperemos que el rendimiento no sea un problema, ya que esto solo se llama una vez e implica una llamada curl. Me he metido en problemas por tener múltiples copias del número de versión en varios lugares.

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

Parece que no funciona. Recibo esta advertencia Call to undefined function get_plugin_data().

Ari Ari
5 dic 2013 09:53:10

@AriSusanto ¿Estás intentando usarlo en el front end? Las funciones de administración de plugins de WP solo están definidas en la sección de administración. Si necesitas usar esto en el front end, tendrás que incluir el archivo wp-admin/includes/plugin.php.

goldenapples goldenapples
7 dic 2013 01:01:31

No, lo uso en el panel de administración.

Ari Ari
7 dic 2013 04:56:32

Si tienes el error undefined, puedes usar la función get_plugin_data. Para el rendimiento, he añadido un comentario aquí: 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 ene 2018 23:06:17
2
21

Una alternativa a get_plugin_data() es get_file_data() que está disponible sin la sobrecarga de cargar archivos adicionales.

Simplemente añade esto a tu archivo principal del plugin:

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

Internamente, get_file_data realiza un escaneo inteligente para ser bastante eficiente.

Y si es necesario, define tu constante:

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

Supongo que para el rendimiento también es mejor escribir el número de versión manualmente? (como se explica aquí: 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 jul 2019 17:00:58

@baptx sí, sin embargo, esta es una optimización que sería insignificante considerando todo lo demás que WordPress hace en cada solicitud. En otras palabras, no importa

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

Aquí hay una respuesta con algo de código que hará lo que deseas: ¿Hay alguna forma de que un plugin obtenga su propio número de versión?

25 may 2011 22:59:53
0

Al igual que la función wp_get_theme(), existe la función get_plugin_data(). Esta función devuelve los datos del plugin como nombre, versión, descripción, autor, etc...

Antes de llamar a la función, asegúrate de que esté disponible, de lo contrario, obtendrás el error 'llamada a función indefinida'.

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'] : 'Nombre del Plugin' );
define( 'BMLT_CURRENT_VERSION', ($plugin_data && $plugin_data['Version']) ? $plugin_data['Version'] : '1.0.0' );
20 ago 2021 02:19:55
0

Una posible solución puede ser expresiones regulares:

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

Debo mencionar que esta expresión regular es un poco más rápida que get_file_data() pero en general no notarás la diferencia.

20 abr 2019 12:18:41
0

Puedes definir una constante en el archivo php principal de tu plugin.

define ('MY_PLUGIN_VERSION', '1.0');

Luego, si deseas mostrar la versión en páginas posteriores dentro de la carpeta de tu plugin, simplemente usa:

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

No olvides reemplazar 'MY_PLUGIN' con el nombre real de tu plugin

11 jul 2021 10:54:30