WordPressでメディア(画像)のアップロード先をユーザーごとのフォルダに分ける
WordPressで複数ユーザーの更新を許可する場合、退会時の処理などを考えると、メディア(画像や動画)のアップロード先はユーザーごとのフォルダにわけておくと効率的です。 そこで今回は、アップロードフォルダをユーザーごとにわける処理を行ってみました。
更新日: 2019.12.11公開日: 2017.8.21
upload_dirフックをつかってフォルダを分ける
今回は、単純にWordPressのフックポイント「upload_dir」を使って、フォルダ分けをしてみます。
function.phpに下記の内容を追記します。
#
## upload_dirをユーザー名に
#
function my_upload_dir($upload) {
global $current_user;
get_currentuserinfo();
$upload['subdir'] = "/" . $current_user->user_login;
$upload['path'] .= $upload['subdir'];
$upload['url'] .= $upload['subdir'];
return $upload;
}
add_filter('upload_dir', 'my_upload_dir');
これで、アップロードしたユーザーのフォルダを作って、そこにダウンロードをすることができます。
ちなみに、プラグイン「Custom Upload Dir」を使っても、同じようにフォルダを分けることができます。ただし、こちらも、下記の「WP Offload S3 Lite」プラグインには対応していません。
「WP Offload S3 Lite」プラグインを使って、Amazon S3をメディアの保存先にしている場合
Amazon S3をメディアの保存先に設定できる便利なプラグイン「Amazon Web Services」および「WP Offload S3 Lite」を使っている場合は、プラグインの編集が必要です。
なお、WordPressでメディアの保存先をAmazon S3にするやり方は、下記の記事をどうぞ。
null
プラグインの設定を編集する
/wp-content/plugin/amazon-s3-and-cloudfront/amazon-s3-and-cloudfront.phpのファイルを編集します。
//function get_dynamic_prefix内、2956行あたりに追加(return $prefix;の前)
#
## ユーザーごとのフォルダにする
#
global $current_user;
get_currentuserinfo();
$prefix .= $current_user->user_login;
これで、Amazion S3側の保存先も、ユーザーごとのフォルダになります。
注意点としては、プラグインのファイルを直接触ってしまっているので、管理画面からプラグインのアップデートをすると元に戻ってしまいます。
プラグインのアップデートする際はご注意を。
おまけ:月日フォルダ分けをしたくないなら
せっかく乱数でシンプルなURLになったのに、WordPressのデフォルト設定では月日フォルダにわけるようになっています。
そこを回避するには、WordPressのメニューから、
設定>ファイルアップロード>「アップロードしたファイルを年月ベースのフォルダに整理」
のチェックを外せばOKです。