Blog スタッフブログ
[WordPress]メディアフォルダにBasic認証を追加
WordPressで会員向け資料や限定公開のPDFを扱う場合、投稿または固定ページにBasic認証をかけただけでは不十分です。
PDFファイルのURLに直接アクセスされると閲覧できてしまいます。
例えば、カスタム投稿で「冊子」ページを作成し、その中にPDFリンクを設置している場合でも、PDFのURLが以下のようなメディアファイル直リンクになっていると、投稿ページの認証とは別扱いになるためです。
https://example.com/wp/wp-content/uploads/sample.pdfそこで今回は、例を元にACFでアップロードしたPDFだけを専用ディレクトリに保存し、そのディレクトリにもBasic認証を設定する方法を紹介します。
カスタムフィールドでアップロードしたファイルを格納する専用フォルダを作成
カスタムフィールドにはプラグイン「Advanced Custom Fields」を使用します。
まず、ACFのファイルフィールドからアップロードしたPDFだけを専用フォルダに保存します。
今回は、ACFのフィールドキーを指定して、該当フィールドからアップロードされたファイルだけ保存先を変更します。
/* ACFの冊子PDFアップロード時だけ専用フォルダへ変更 */
function my_acf_booklet_upload_prefilter($errors, $file, $field)
{
add_filter('upload_dir', 'my_acf_booklet_upload_dir');
return $errors;
}
add_filter('acf/upload_prefilter/key=field_6a5066b63c6d2', 'my_acf_booklet_upload_prefilter', 10, 3);/* アップロード先ディレクトリを /uploads/booklet_file/ に変更 */
function my_acf_booklet_upload_dir($uploads)
{
$uploads['subdir'] = '/booklet_file';
$uploads['path'] = $uploads['basedir'] . $uploads['subdir'];
$uploads['url'] = $uploads['baseurl'] . $uploads['subdir'];
if (!file_exists($uploads['path'])) {
wp_mkdir_p($uploads['path']);
}
return $uploads;
}このコードを functions.php に追加します。
上記のコードの中で、ACFのフィールドキー「field_6a5066b63c6d2」は環境にあわせて変更が必要です。
自身の環境のACFでフィールドキーを確認してください。

保存される場所
上記の設定を行うと、対象のACFフィールドからアップロードされたPDFは、通常の年月フォルダではなく、以下のような専用フォルダに保存されます。
/wp-content/uploads/booklet_file/PDF保存フォルダにもBasic認証を設定する
作成したフォルダの中に .htaccess を設置します。
/wp-content/uploads/booklet_file/.htaccess中身は以下です。
AuthUserFile "/home/example/www/wp-content/uploads/booklet_file/.htpasswd"
AuthName "Restricted Area"
AuthType Basic
Require valid-userこれで、PDFのURLへ直接アクセスした場合にもBasic認証が表示されます。
AuthUserFileは自身の環境にあわせて変更してください。
.htpasswd を用意
次に.htpasswdを用意します。
/wp-content/uploads/booklet_file/.htpasswd.htpasswd には、Basic認証で使用するユーザー名と暗号化されたパスワードを記述します。
例:user:$apr1$xxxxxxxxxxxxxxxxxxxxxxxx
.htpasswd はサーバーの管理画面や、htpasswdコマンド、またはhtpasswd生成ツールなどで作成できます。
以上がメディアの特定フォルダにBasic認証を設定する方法です。