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.
La entrada Descarga directa de un archivo desde URL sin plugins es un artículo reciente del sitio DecodeCMS.
0 Commentaires