Quiero Obtener el Número de Versión de un Plugin Dinámicamente
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?
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.

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

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

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

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

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

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)

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?

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

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.

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
