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.