Quiero obtener un número de versión de complemento de forma dinámica

10

Hola, recientemente puse W3TC para implementar una pantalla de lista de cambios "en actualización" (muy interesante), en mi complemento , pero hay un código incómodo que preferiría evitar.

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

define ( 'BMLT_CURRENT_VERSION', '2.1.16' ); // This needs to be kept in synch with the version above.

Ick :PAGS

Es necesario mantenerlo actualizado, para que la función pueda diferenciarse entre su complemento y la versión estable actual.

He leído detenidamente el Codex y no puedo encontrarlo, pero TIENE que haber una función API para obtener la versión de un complemento.

¿Alguna pista?

Chris Marshall
fuente

Respuestas:

14

Hay una función llamada get_plugin_data () . Intente llamar a esto desde el archivo de complemento principal si necesita:

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

Pero como se dice en las respuestas a la otra pregunta, es mejor que el rendimiento solo defina una variable PHP como lo está haciendo.

goldenapples
fuente
¡Gracias! Con suerte, el rendimiento no será un gran problema, ya que esto solo se llama una vez e implica una llamada curl. Me acabo de meter en problemas por tener varias copias del número de versión por todas partes.
Chris Marshall
1
no parece funcionar Recibo esta advertencia Call to undefined function get_plugin_data().
Ari
@AriSusanto ¿Estás tratando de usarlo en el front-end? Las funciones de administración del complemento WP solo se definen en la sección de administración. Si necesita usar esto en el front end, deberá incluir el archivo wp-admin/includes/plugin.php.
goldenapples
No, lo uso en el panel de administración.
Ari
Si tiene el error indefinido, puede usar la función get_plugin_data. Para el rendimiento, agregué un comentario aquí: wordpress.stackexchange.com/questions/361/…
baptx
9

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

Simplemente agregue esto a su archivo de complemento principal:

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

Debajo del capó get_file_datahace un escaneo de cuchilla para que sea bastante eficiente.

Y si es necesario, defina su constante:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );
Paulcol.
fuente
Supongo que para el rendimiento también es mejor escribir el número de versión manualmente. (como se explica aquí: wordpress.stackexchange.com/questions/361/… )
baptx
@baptx sí, sin embargo, esta es una optimización que sería insignificante teniendo en cuenta todo lo demás que Wordpress hace en cada solicitud. En otras palabras, no importa
Paulcol.
1

Una posible solución puede ser regex:

$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 lo notará.

Ivijan Stefan Stipić
fuente