X

Descarga directa de un archivo desde URL sin plugins

En algunos casos es posible que necesites la funcionalidad de descarga de archivos, pero quieres que se descarguen directamente y no que se muestren en el navegador (por ejemplo al descargar un PDF).

 

Generalidades

En este artículo veremos como realizar la descarga directa de un archivo de cualquier tipo directamente a través de una URL, además podremos agregar condiciones a la descarga, por ejemplo que sólo se pueda realizar por usuarios registrados. Veremos como hacerlo a través de código.

 

Código para descargar un archivo desde una URL en WordPress

Puedes agregar el siguiente código como parte del archivo functions.php de tu tema hijo o usando algún plugin de Snippets.

add_action( 'template_redirect', 'descargar_archivo_usuarios' );

function descargar_archivo_usuarios() : void {
	if ( ! isset( $_GET['descargar'] ) ) {
		return;
	}

	$path_file = ABSPATH . 'wp-content/uploads/archivo_a_descargar.zip';

	if ( ! file_exists( $path_file ) ) {
		echo "El archivo no existe <a href='" . home_url() . "'>Volver</a>";
		exit;
	}

	if (!is_user_logged_in()) {
		echo "Debes iniciar sesión para descargar el archivo <a href='" . wp_login_url() . "'>Iniciar sesión</a>";
		exit;
	}

	$file_info = new finfo(FILEINFO_MIME_TYPE);
	$mime_type = $file_info->file($path_file);

	header( 'Content-Type: ' . $mime_type );
	header( 'Content-Disposition: attachment; filename="' . basename($path_file) . '"' );
	readfile( $path_file );
	exit;
}

En el código anterior:

  • Usamos el hook template_redirect que hace referencia a la función descargar_archivo_usuarios
  • Dentro de la función comprobamos que exista un parámetro llamado «descargar» como parte de la URL, sino existe el resto del código no se ejecutará
  • Definimos la ruta del archivo a descargar, en nuestro caso será un archivo .zip pero puede ser de cualquier otra extensión
  • Comprobamos que el archivo exista
  • Hacemos otra comprobación para detectar si el usuario esta conectado
  • Finalmente tenemos el código para forzar la descarga, obtenemos información del tipo de archivo para usarla posteriormente como parte de la cabecera
  • Establecemos el nuevo nombre del archivo y forzamos la descarga

 

Conclusión

Como hemos podido comprobar, puedes habilitar la descarga de un archivo usando los parámetros de las URLs, y adicionalmente colocar condiciones a la descarga, por ejemplo que sea para usuarios conectados, hemos visto como realizar esto directamente a través de código y sin usar plugins.

 

Categorías: Themes
Etiquetas: funcionalidad