Existe alguma maneira de testar se uma função em execução apenas na atualização do plugin está sendo executada com sucesso?

4

Existe alguma maneira de testar se uma função em execução apenas na atualização do plug-in está sendo executada com sucesso? Agora eu estou chamando a função se a versão do WP presente no arquivo de configuração não é igual ao valor da versão do plugin no banco de dados e, portanto, teste alterando o valor da constante. Mas existe alguma outra abordagem melhor?

    
por learning_13 04.04.2017 / 15:52

1 resposta

0
  

Existe alguma maneira de testar se uma função em execução apenas na atualização do plug-in está sendo executada com sucesso?

Sim.

Antecedentes

Quando você atualiza um plug-in, o WordPress realiza várias ações nos bastidores.

  1. Faça o download da nova versão do plug-in
  2. Desativar a versão antiga do plug-in
  3. Excluir a versão antiga do plug-in
  4. Extraia a nova versão
  5. Ativar a nova versão

Além dos ganchos que o WordPress aciona durante essas ações, ele dispara upgrader_process_complete . Esse gancho passa dois parâmetros para o retorno de chamada: $this , que é obviamente a instância do objeto, e $options['hook_extra'] , que são argumentos extras passados para os ganchos de filtro chamados por WP_Upgrader::install_package() . A classe Plugin_Upgrader passa a seguinte matriz:

array( 'plugin' => $plugin,
       'type' => 'plugin',
       'action' => 'update',
)

Upgrader Hook

Portanto, se quisermos executar uma função em uma atualização de plug-in, podemos usar esse gancho.

add_action( 'upgrader_process_complete', 'wpse_262412_upgrader_process_complete' );
function wpse_262412_upgrader_process_complete( $instance, $extras ) {
  //* Only interesting when 'our' plugin updates
  if(
    'plugin' !== $extras[ 'type' ] &&
    'update' !== $extras[ 'action' ] &&
    'my-plugin-name' !== $extras[ 'plugin' ]
  ) {
    return;
  }
  //* Do something useful after your plugin updates
  wpse_262412_something_useful();
}

Verificando

Se você estiver desenvolvendo um plug-in e quiser fazer com que uma função específica seja executada na atualização do plug-in, você poderá adicionar uma opção ao banco de dados:

function wpse_262412_something_useful() {
  include_once( ABSPATH . '/wp-admin/includes/plugin.php' );
  $data = get_plugin_data( 'my-plugin-name' );
  update_option( 'my-plugin-update-option', $data[ 'version' ] );
}

Em seguida, podemos adicionar uma ação ao init que verifica esse valor de opção. Se o valor da opção for igual à versão do plug-in atual, saberemos que a função foi executada. Então, podemos nos certificar de que podemos ver que a função foi executada, como adicionar um aviso administrativo.

add_action( 'init', 'wpse_262412_init' );
function wpse_262412_init() {
  $data = get_plugin_data( 'my-plugin-name' );
  $option = get_option( 'my-plugin-update-option' );
  if( $data[ 'version' ] === $option ) {
    //* The plugin update function ran successfully
    add_action( 'admin_notices', 'wpse_262412_update_notice' );
  }
}

function wpse_262412_update_notice() {
?>
  <div class="updated notice">
    <p><?php _e( 'The function has run correctly.', 'wpse-262412' ); ?></p>
  </div>
  <?php
}
  

Mas existe alguma outra abordagem melhor?

Isso é melhor que sua abordagem? Eu não sei. Depende da sua aplicação. Não envolve abrir e ler um arquivo de configuração, então provavelmente será mais rápido. Mas provavelmente não muito visivelmente. Eu não faria nenhum método em um site de produção. Verifique se o seu código funciona em um servidor de desenvolvimento e use-o. Se você está falando sobre como comparar números de versão de plugins, isso parece tão bom quanto qualquer maneira de fazer isso comigo.

    
por Nathan Johnson 14.04.2017 / 00:01