WPでファイルをアップロードした場合、必ず/wp-content/uploads/にアップロードされるのだが、これを変更したい場合・・・特にユーザーごとに変えたい場合は、以下の2手順を行う。
①function.phpに追記する
add_filter( 'upload_dir', 'themeslug_upload_dir' ); function themeslug_upload_dir( $uploads ) { // 未ログインユーザーの場合は anonymous にフォールバック: $user_id = get_current_user_id() ?: '●ユーザーのID●'; $subdir = "/users/${user_id}" . $uploads['subdir']; $uploads['path'] = $uploads['basedir'] . $subdir; $uploads['url'] = $uploads['baseurl'] . $subdir; return $uploads; }
まず前提が特定ユーザー一人とそれ以外、という2択になっている。多分「$user_id = get_current_user_id()」の行を増やしたら複数設定できそうな気がするが、検証はしていない。「ユーザーのID」の所に、管理画面のユーザー一覧からIDをチェックし数字を入れる。これを設定したら、「/wp-content/uploads/users/1/*.*」「/wp-content/uploads/users/2/*.*」とユーザーIDごとに振り分ける事が可能になる。
②メニューの設定を変更する
管理画面の設定>メディアの”ファイルアップロード”にある「アップロードしたファイルを年月ベースのフォルダーに整理」のチェックを外す。
以上で、ユーザーごとにアップロードするファイルを変えれるようになる。
これが出来るようになると、「WPでアップロードしたファイルを404にする(管理画面にログインしたら見れる)」と組み合わせたら、総管理者のファイルは一般に見れないが、ユーザーID4の人のファイルは誰でも見る事が出来る・・・という構成も可能ってことだ。