WPでユーザーごとにアップロードするファイルを変える

投稿者: | 2025年3月7日

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の人のファイルは誰でも見る事が出来る・・・という構成も可能ってことだ。