J'ai ce code qui fonctionne dans un fichier nommé downloads/download.php:
<?php
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="file.pdf"');
readfile('file.pdf');
?>
Il invite correctement à télécharger file.pdf.
Je dois suivre les téléchargements, donc je veux utiliser diverses fonctions WP. Pour amener la page à l'intérieur de WP, j'ai ajouté blog-header.php comme suit:
<?php
define('WP_USE_THEMES', false);
require('../wp-blog-header.php');
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="file.pdf"');
readfile('file.pdf');
?>
Cela retourne un 404. Est-ce que quelqu'un sait pourquoi amener la page à l'intérieur de WP causerait cela?
Je pense que Wordpress a un problème avec l'URL de votre script externe et génère une erreur 404 de la fonction handle_404()
dans la classe wp
dans /wp-includes/class-wp.php
Vous pouvez essayer de surmonter cela en utilisant par exemple status_header(200)
<?php
define('WP_USE_THEMES', false);
require('../wp-blog-header.php');
status_header(200);
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="file.pdf"');
readfile('file.pdf');
?>
Il est informatif de consulter le source de la configuration de la requête Wordpress wp()
appelée à partir du fichier wp-blog-header.php
.
Cette fonction est définie dans /wp-includes/functions.php
et ressemble à ceci
function wp( $query_vars = '' ) {
...cut...
$wp->main( $query_vars );
...cut...
}
où
function main($query_args = '') {
...cut...
$this->handle_404();
...cut...
}
et
function handle_404() {
...cut...
// Guess it's time to 404.
$wp_query->set_404();
status_header( 404 );
nocache_headers();
...cut...
}
provient de la classe wp
dans /wp-includes/class-wp.php
.