web-dev-qa-db-ja.com

力 PDF カスタムメニューからダウンロードしますか?

カスタムナビゲーションメニューにPDFへのリンクを追加しました。オープンではなくダウンロードを強制する方法はありますか?

1
Steve Fischer

すべてのPDF添付ファイルが強制的にダウンロードされることを気にしないのであれば、次のようなものを使用できます。

<?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;
?>

上記のコードをあなたの現在のテーマフォルダにあるpdf.phpというファイルに入れてください。それからあなたのpdf(http://example.com/wp-content/uploads/2011/01/Guide-to-Owning-a-Listed-Building.pdf)に直接リンクする代わりに、添付URLにリンクしてください:(http ://example.com/help-and-advice/attachment/guide-to-owning-a-listed-building/)

上記のようにして、あなたはあなたのPDFの実際の場所を保護しながらトラックのダウンロードのような他の空想のものをするためにコードを編集し、ある程度の認証を追加することができます。

6
Brady

ブラウザがPDFに遭遇したときに何が起こるかはあなたがそれにリンクする方法に依存しません。特別なHTTPヘッダを介して開くのではなくダウンロードするようにブラウザに 提案 することができますが、すべてのブラウザがこの提案に注意を払うとは思いません。

スタックオーバーフローの質問 「PHPを使用してファイルを強制的にダウンロードする」 を参照してください。

2
Jan Fabry