[WordPress] メディア(画像)のアップロード先をユーザーごとのフォルダに分ける

WordPressで複数ユーザーの更新を許可する場合、退会時の処理などを考えると、メディア(画像や動画)のアップロード先はユーザーごとのフォルダにわけておくと効率的です。

そこで今回は、アップロードフォルダをユーザーごとにわける処理を行ってみます。

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」を使っている場合は、プラグインの編集が必要です。

->メディアの保存先をAmazon S3にする

[blogcard url=”http://c0d3.webcrow.jp/c0d3man/posts/493d1b94t8wk3o84w575″ title=”メディアの保存先をAmazon S3にする” content=”WordPressで複数ユーザーの更新を許可する場合、退会時の処理などを考えると、メディア(画像や動画)のアップロード先はユーザーごとのフォルダにわけておくと効率的です。

そこで今回は、アップロードフォルダをユーザーごとにわける処理を行ってみます。”]

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