Quero obter um número de versão do plug-in dinamicamente

10

Olá, recentemente criei o W3TC para implementar uma exibição de lista de alterações "in-update" (muito legal), no meu plug-in , mas há um pedaço estranho de código que prefiro evitar.

Se você olhar para a parte superior deste arquivo , verá o seguinte código:

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

Ick. : P

Isso precisa ser mantido atualizado, para que a função possa delta entre seu plug-in e a versão estável atual.

Tenho lidos do Codex, e não pode encontrá-lo, mas não tem GOT para ser uma função da API para obter a versão de um plugin.

Alguma pista?

Chris Marshall
fonte

Respostas:

14

Existe uma função chamada get_plugin_data () . Tente chamar isso de dentro do arquivo principal do plug-in se precisar:

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

Mas, como é dito nas respostas à outra pergunta, é melhor para o desempenho definir apenas uma variável PHP como você está fazendo.

maçãs douradas
fonte
Obrigado! Felizmente, o desempenho não será um grande problema, pois isso é chamado apenas uma vez e envolve uma chamada direta. Acabei de ter problemas por ter várias cópias do número da versão em todo o lugar.
Chris Marshall
11
parece não funcionar. Eu recebo este aviso Call to undefined function get_plugin_data().
Ari #
@AriSusanto Você está tentando usá-lo no front end? As funções de administração do plugin WP são definidas apenas na seção admin. Se você precisar usar isso no front-end, precisará incluir o arquivo wp-admin/includes/plugin.php.
goldenapples
Não, eu uso no painel de administração.
Ari #
Se você tiver o erro indefinido, poderá usar a função get_plugin_data. Para o desempenho, adicionei um comentário aqui: wordpress.stackexchange.com/questions/361/…
baptx
9

Uma alternativa para get_plugin_data()é get_file_data (), que está disponível sem a sobrecarga de carregar arquivos adicionais.

Basta adicionar isso ao seu arquivo principal de plug-in:

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

Sob o capô, get_file_datafaz uma varredura de cutelo para ter um bom desempenho.

E, se necessário, defina sua constante:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );
paulcol.
fonte
Eu acho que para o desempenho também é melhor escrever o número da versão manualmente? (como explicado aqui: wordpress.stackexchange.com/questions/361/… )
baptx
@ batx sim, no entanto, esta é uma otimização seria insignificante, considerando tudo o que o Wordpress faz em cada solicitação. Em outras palavras, isso não importa
paulcol.
1

Uma solução possível pode 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];

É preciso mencionar que esse regex é um pouco mais rápido do que o normal, get_file_data()mas geralmente você não notará.

Ivijan Stefan Stipić
fonte