Hook para solicitud de URL

4

Me gustaría hacer que los archivos XML se puedan descargar, en lugar de permitir que el navegador los muestre en línea.

Sé que puedo usar el encabezado HTTP Content-Disposition: attachment (por supuesto, ¡las mejores soluciones son bienvenidas!). Quiero agregar este encabezado en todas las respuestas HTTP cuando un usuario intenta descargar un archivo XML.

Puedo usar el siguiente código PHP:

header('Content-Disposition: attachment; filename="the_filename.xml"');

El problema es: ¿cuándo puedo llamar a esta instrucción? ¿Qué gancho debo usar y cómo?

    
pregunta User 03.10.2012 - 15:23

3 respuestas

4

En realidad, mi recomendación sería hacer las cosas de manera un poco diferente. Puede agregar un punto final de reescritura personalizado a WordPress para manejar estos archivos específicamente.

Por ejemplo, la URL http://site.com/download-xml/the_filename descargaría automáticamente el archivo especificado como un archivo adjunto.

Primero, debe agregar un punto final de reescritura personalizado para configurarlo:

function add_endpoint() {
    add_rewrite_endpoint( 'download-xml', EP_ALL );
}
add_action( 'init', 'add_endpoint' );

Esto también agrega una variable de consulta para que podamos verificar si este punto final se está utilizando durante una redirección de plantilla estándar.

function download_redirect() {
    global $wp_query;

    // If this isn't the right kind of request, bail.
    if ( ! isset( $wp_query->query_vars['download-xml'] ) || empty( $wp_query->query_vars['download-xml'] ) )
        return;

    // Download the file.

    exit();
}
add_action( 'template_redirect', 'download_redirect' );

En la función anterior, puedes hacer lo que necesites para descargar el archivo. Cárguelo desde el directorio /wp-content/uploads como una secuencia, establezca los encabezados de los archivos (con la disposición de contenido configurada en "archivo adjunto"), genere dinámicamente contenido basado en algo en la base de datos, lo que desee.

Solo asegúrate de tener la llamada exit() al final, de lo contrario, WordPress intentará ejecutar las llamadas de redirección de la plantilla normal y obtendrás algunos errores de "encabezados que ya se enviaron" más adelante.

    
respondido por el EAMann 03.10.2012 - 20:14
2

Deberá echar un vistazo a API de complemento / Referencia de acción / enviar encabezados

Ejemplo :

add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
     header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
    
respondido por el Michael Ecklund 03.10.2012 - 15:29
0

Creo que puedes usar el gancho de acción parse_request parse_request

add_action('parse_request', 'handleDownload', 10, 1);
    
respondido por el Sumit Parkash 23.03.2018 - 20:02

Lea otras preguntas en las etiquetas