¿Hay alguna forma de probar si una función que se ejecuta solo en la actualización del complemento se está ejecutando con éxito?

4

¿Hay alguna forma de probar si una función que se ejecuta solo en la actualización del complemento se está ejecutando con éxito? Ahora mismo estoy llamando a la función si la versión WP presente en el archivo de configuración no es la misma que la del valor de la versión del complemento en la base de datos y, por lo tanto, la prueba cambia el valor de la constante. Pero ¿hay algún otro enfoque mejor?

    
pregunta learning_13 04.04.2017 - 15:52

1 respuesta

0
  

¿Hay alguna forma de probar si una función que se ejecuta solo en la actualización del complemento se está ejecutando correctamente?

Sí.

Fondo

Cuando actualizas un complemento, WordPress realiza varias acciones detrás de escena.

  1. Descargue la nueva versión del complemento
  2. Desactivar la versión anterior del complemento
  3. Eliminar la versión anterior del complemento
  4. Extraer la nueva versión
  5. Activar la nueva versión

Además de los ganchos que WordPress dispara durante esas acciones, dispara upgrader_process_complete . Este enlace pasa dos parámetros a la devolución de llamada: $this , que obviamente es la instancia del objeto, y $options['hook_extra'] , que son argumentos adicionales que se pasan a los enlaces de filtro llamados por WP_Upgrader::install_package() . La clase Plugin_Upgrader pasa la siguiente matriz:

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

Gancho de actualización

Por lo tanto, si queremos ejecutar una función en una actualización de un complemento, podemos usar este enlace.

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

Comprobando

Si está desarrollando un complemento y desea que una función particular se ejecute en la actualización del complemento, puede agregar una opción a la base de datos:

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

Luego podemos agregar una acción a init que verifique el valor de esa opción. Si el valor de la opción es igual a la versión actual del complemento, entonces sabemos que la función se ha ejecutado. Luego podemos asegurarnos de que podamos ver que la función se ha ejecutado, como agregar un aviso de administrador.

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
}
  

¿Pero hay algún otro enfoque mejor?

¿Es esto mejor que tu enfoque? No lo sé. Depende de su aplicación. No implica abrir y leer un archivo de configuración, por lo que probablemente será más rápido. Pero probablemente no notablemente mucho. Yo no haría ningún método en un sitio de producción. Asegúrese de que su código funcione en un servidor de desarrollo, luego utilícelo. Si estás hablando de comparar los números de versión de los complementos, me parece que es una buena forma de hacerlo.

    
respondido por el Nathan Johnson 14.04.2017 - 00:01

Lea otras preguntas en las etiquetas