J'ai ajouté un lien vers un PDF dans mon menu de navigation personnalisé. Est-il possible de le forcer à télécharger au lieu d'ouvrir?
Si vous ne craignez pas que toutes les PDF pièces jointes aient été téléchargées, vous pouvez utiliser quelque chose comme ceci:
<?php
if (have_posts()) : while (have_posts()) : the_post();
$pdf_title = $post->post_title;
$uploads_dir = wp_upload_dir();
$attachment_src = get_post_meta( $post->ID, '_wp_attached_file', true );
$pdf_src = path_join( $uploads_dir['basedir'], $attachment_src );
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"".$pdf_title."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($pdf_src));
ob_clean();
flush();
readfile($pdf_src);
endwhile; endif;
?>
Placez le code ci-dessus dans un fichier nommé pdf.php dans votre dossier de thèmes actuel. Ensuite, au lieu de créer un lien direct vers votre fichier PDF (http://example.com/wp-content/uploads/2011/01/Guide-to-Owning-a-Listed-Building.pdf), créez un lien vers l'URL de la pièce jointe: (http : //example.com/help-and-advice/attachment/guide-to-owning-a-listed-building/)
En procédant comme ci-dessus, vous pouvez modifier le code pour effectuer d'autres tâches fantaisistes telles que le téléchargement de pistes et ajouter un certain niveau d'authentification tout en protégeant l'emplacement réel de vos PDF.
Que se passe-t-il lorsque le navigateur rencontre un PDF ne dépend pas de la façon dont vous y créez un lien? Vous pouvez suggérer au navigateur de le télécharger au lieu de l'ouvrir via un en-tête HTTP spécial, mais je ne pense pas que tous les navigateurs s'intéressent à cette suggestion.
Plus d'informations peuvent être trouvées dans la question Stack Overflow "Forcer le téléchargement d'un fichier en utilisant PHP" .