Ticker

6/recent/ticker-posts

Ad Code

Responsive Advertisement

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.

 

La entrada Descarga directa de un archivo desde URL sin plugins es un artículo reciente del sitio DecodeCMS.

Enregistrer un commentaire

0 Commentaires