Tareas Programadas Para Borrar Ficheros

701px-Surname_341a

Recientemente me he encontrado con la necesidad de borrar unos ficheros pdf que se generan automáticamente en la web.

Estos ficheros se crean en la carpeta uploads de la instalación. Una solución sería programar un cron en el sistema operativo para que se borrarán cada noche, pero quería probar la creación de tareas programadas dentro del ecosistema de WordPress y aquí está la solución.

Primero, es programar la tarea, para ello añadimos la siguiente acción.

add_action( 'after_switch_theme', 'crear_crons' );

Yo decido ponerlo en el momento que se activa el Tema, usando el hook afert_switch_theme

Ahora el callback de la acción, crear_crons(), Aquí vamos a crear una tarea que vamos a llamar borrar_pdfs, con la función wp_next_scheduled comprobamos que no esté ya creada, en cuyo caso la creamos.

function crear_crons() {
  if ( ! wp_next_scheduled( 'cron_borrar_pdfs' ) ) {
    wp_schedule_event( current_time( 'timestamp' ), 'daily', 'cron_borrar_pdfs' );

  }
}

Con la función wp_schedule_event programamos un “hook” que se ejecuta diariamente desde el momento actual.

Existen varios intervalos por defecto que ofrece WordPress, aunque fácilmente se pueden crear unos personalizados.

Finalmente, el código propio que borra los ficheros

add_action( 'cron_borrar_pdfs', 'borrar_pdfs' );

function borrar_pdfs() {
  $upload_dir = wp_upload_dir();
  $directorio = $upload_dir['basedir'];
  $dir = opendir($directorio );

  while (false != ($file = readdir($dir ))){

    if (!is_dir($directorio.'/'.$file)){
      unlink($directorio .'/'.$file);

    }

  }

  exit;

}

 

Ahora bien, ¿cómo ver si esta bien programado? ¿puede realizar una ejecución cuando quiera o tengo que esperar? pues para estas preguntas, yo he usado el siguiente plugin WP-Crontrol . Con este plugin se puede para revisar las tareas programadas, ejecutarlas, borrarlas, y es muy intuitivo.

Ya solo falta eliminar el trabajo programado. Como lo he creado al activar el theme, es de lógica que sea en le momento de cambiar a otro theme, cuando borre la tarea programada

add_action('switch_theme', 'limpiar_crons');
function limpiar_crons() {
     $timestamp = wp_next_scheduled( 'cron_borrar_pdfs' );
     wp_unschedule_event( $timestamp, 'cron_borrar_pdfs' );
}

…. y aquí todo el código juntito….

add_action( 'after_switch_theme', 'crear_crons' );
function crear_crons() {
	if ( ! wp_next_scheduled( 'cron_borrar_pdfs' ) ) {
		wp_schedule_event( current_time( 'timestamp' ), 'daily', 'cron_borrar_pdfs' );

	}
}

add_action( 'cron_borrar_pdfs', 'borrar_pdfs' );
function borrar_pdfs() {

	$upload_dir = wp_upload_dir();
	$directorio = $upload_dir['basedir'];
	$dir = opendir($directorio ); 

	$fecha_dia = date ("Ymd");

	while (false != ($file = readdir($dir ))){

		if (!is_dir($directorio.'/'.$file)){
			unlink($directorio .'/'.$file);

		}

	}

	exit; 

}

add_action('switch_theme', 'limpiar_crons');
function limpiar_crons() {
	$timestamp = wp_next_scheduled( 'cron_borrar_pdfs' );
	wp_unschedule_event( $timestamp, 'cron_borrar_pdfs' );

}


Anuncios

Dime que piensas...

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s