web-dev-qa-db-fra.com

Obligé PDF télécharger du menu personnalisé?

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?

1
Steve Fischer

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.

6
Brady

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" .

2
Jan Fabry