c0d3man52

Webサイト制作

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です。