web-dev-qa-db-ja.com

リンクする PDF ダウンロード可能な文書として

ブラウザウィンドウで開かずにダウンロードするように、コンテンツのPDFへのリンクを追加するにはどうすればよいですか。 (私はPDFをメディアライブラリにアップロードしましたが、リンクを挿入することはできますが、ブラウザウィンドウで開かないようにするオプションを見つけることができません)。

ありがとう、

ルーシー

5
Lucy

あなたの.htaccessにこれを追加しようとするかもしれません:

<FilesMatch "\.(?i:pdf)$">
    # Force File Download
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</FilesMatch>
10

実際、それは完全にブラウザに依存しています。一部のブラウザでは、PDFを内蔵の[PDFリーダーを使用して開きます(ほとんどの場合、Adobeプラグインを使用します。GoogleChromeには独自のプラグインがあります)。ただし、プラグインが見つからない場合、ブラウザは代わりにファイルをダウンロードしようとします。

最も安全な方法は、ユーザーが右クリックして[名前を付けて保存]を選択するようにページに指示を追加することです。

リンクをクリックしてもユーザーがページに戻れないことが心配な場合は、リンクにtarget="_blank"を追加すると、ブラウザは新しいタブまたはウィンドウでそのリンクを開くように強制します。時々、これは代わりにダウンロードを引き起こすのに十分である場合もあります。

例:<a href="http://site.url/document.pdf" target="_blank">Download PDF</a>

2
EAMann

PDFはmime-typeがapplication/pdfで保存されるので、テーマにダウンロードを強制するapplication.phpまたはpdf.phpテンプレートファイルがある場合あなたのattachment.phpテンプレートでmime-typeをチェックするなら、あなたはダウンロードを強制することができます。

テーマの中でこのように構築されたpdf.phpファイルがうまくいくはずです:

<?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['path'], $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;

?>

(編集:これを機能させるためには、メディアアップローダを通してあなたの投稿にファイルを挿入するとき、あなたはFile URLではなくPost URLを選択しなければならないことに注意してください。投稿に挿入する前のLink URLフィールドファイル名へのリンクはブラウザの設定に従いますが、WP postリンクにリンクすることでその動作を制御できます。

2
goldenapples