Programación

Reinstalar WordPress con código

En ocasiones, necesitamos reinstalar WordPress por multitud de razones: errores, problemas de seguridad, incidentes en el hosting, etc. Hay muchas formas de hacerlo:

  • subiendo por FTP los ficheros correspondientes
  • en el escritorio de WordPress en la parte de actualizaciones el botón que hay para reinstalar el núcleo
  • con alguna herramienta especializada

Pero es posible que nos interese por algún motivo, reinstalar el core de WordPress, desde código, para incluirlo en alguna tarea cron, en una herramienta que estemos preparando o directamente porque queramos jugar con las clases encargadas de estos temas en WordPress.

En este caso, mientras se resolvía un problema de seguridad en un sitio en producción, como última opción consideré la posibilidad de reinstalar el núcleo de WordPress cada hora con una función cron, para que al reinstalarse, se borrara la posible infección. No es el método ideal, pero al cliente le ha dado un respiro en un momento de mucha actividad mientras el alojamiento termina de resolver el problema.

¿Cómo lo he preparado? Pues adapatando lo que hace WordPress cuando le pides reinstalar el núcleo desde el escritorio, en la sección de actualizaciones. Os comparto el código que he preparado para esta labor y os lo comento brevemente, por si os interesa usarlo.

Reinstalar core de WordPress en PHP

Aquí tenéis el código de la función lista para utilizar:

function cod_core_updater(){
 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
 require_once ABSPATH . 'wp-admin/includes/update.php';
 require_once ABSPATH . 'wp-admin/includes/misc.php';
 
 global $wp_filesystem;
 global $wp_version;

 WP_Filesystem();

 wp_version_check( array(), true );

 $update  = find_core_update( $wp_version, 'es_ES' );
 if ( ! $update ) {
  echo "No se encuentran actualizaciones";
  wp_die();
 }

 if ( $wp_filesystem->errors->has_errors() ) {
  foreach ( $wp_filesystem->errors->get_error_messages() as $message ) {
   var_export( $message );
  }
  wp_die();
 }

 $update->response = 'reinstall';
 
 $upgrader = new Core_Upgrader();
 $result = $upgrader->upgrade( $update, array( 'allow_relaxed_file_ownership' => false ) );

 if ( is_wp_error( $result ) ) {
  var_export( $result );
  if ( 'up_to_date' !== $result->get_error_code() && 'locked' !== $result->get_error_code() ) {
   echo __( 'Installation failed.' );
  }
  wp_die();
 }

 wp_die( "Reinstalación terminada" );
}

Como veis son pocas líneas de código para lo que se hace: descargar el paquete del core, descomprimirlo, sustituirlo por los antiguos, etc. Todo ello gracias a las clases y métodos que nos ofrece el núcleo de WordPress.

  1. Primero hacemos el require de los ficheros donde están las clases y métodos que vamos a usar, hace falta hacerlos porque como es lógico, este código no se suele incluir en una ejecución normal de WordPress
  2. Declaramos las variables globales que vamos a usar la que gestiona el sistema de ficheros y la que gestiona las versiones del core de WordPress
  3. Buscamos en el repositorio la versión actual en español de WordPress, si no se encuentra, devolvemos un error y cortamos
  4. Vemos si hay algún error en el sistema de ficheros, si lo hay, mostramos el error y cortamos
  5. Indicamos que la actualización va a ser para reinstalar
  6. Instanciamos un objeto que va a encargarse de la reinstalación propiamente dicha, el de la clase Core_Upgrader
  7. Procedemos a la reinstalación propiamente dicha con el método upgrade en base a la información recuperada del repositorio antes y forzando a que los permisos de ficheros sean correcto
  8. Si hay errores los mostramos
  9. Si no, todo ha terminado sin problemas

Como veis hasta para tareas ciertamente técnicas WordPress nos pone las cosas fáciles.

Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.

Almacenamos las IPs desde la que se envían las valoraciones para evitar fraudes

Francisco Javier Carazo Gil

Entradas recientes

¿Por qué falla Bizum en WooCommerce? 9 causas

Por qué falla Bizum WooCommerce: detecta errores de credenciales, firma, entorno y pedidos para recuperar…

hace % días

Plugin gratuito Redsys WordPress: qué revisar

Elige un plugin gratuito Redsys WordPress con criterio: compatibilidad, seguridad, configuración bancaria y límites para…

hace % días

Qué necesito para activar CECA Online en mi web

¿Qué necesito para activar CECA Online? Revisa contrato bancario, datos del terminal, seguridad, pruebas y…

hace % días

Cómo elegir una pasarela para suscripciones

Aprende a elegir una pasarela para suscripciones en WordPress: revisa recurrencia, compatibilidad, seguridad y soporte…

hace % días

Plugin Bizum WordPress para cobrar con control

Elige un plugin Bizum WordPress compatible con tu flujo de venta, configura la pasarela bancaria…

hace % días

Cómo aceptar CECA en reservas de WordPress

Aprende cómo aceptar CECA en reservas WordPress, configurar pagos seguros y confirmar cada reserva sin…

hace % días