# Store Each User's Uploads in Their Own Folder

> Saves uploads into a folder named after the uploader, such as uploads/users/jane/2025/03/, which keeps multi-author and client sites tidy and makes per-person cleanups easy.

- Type: PHP
- Runs: Run everywhere
- Category: [Media](https://wpide.com/library/category/media/)
- Tags: uploads, folders, users
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/media-folders-per-user/

## Code

```php
$wpide_user_folder = function ( $dirs ) {
    $user = wp_get_current_user();
    if ( ! $user->exists() ) {
        return $dirs;
    }

    $folder = '/users/' . sanitize_file_name( $user->user_nicename );
    if ( 0 === strpos( $dirs['subdir'], $folder ) ) {
        return $dirs;
    }

    $dirs['subdir'] = $folder . $dirs['subdir'];
    $dirs['path']   = $dirs['basedir'] . $dirs['subdir'];
    $dirs['url']    = $dirs['baseurl'] . $dirs['subdir'];

    return $dirs;
};

// Only change the folder while a file is being uploaded.
$wpide_user_folder_on = function ( $file ) use ( $wpide_user_folder ) {
    add_filter( 'upload_dir', $wpide_user_folder );
    return $file;
};
$wpide_user_folder_off = function ( $upload ) use ( $wpide_user_folder ) {
    remove_filter( 'upload_dir', $wpide_user_folder );
    return $upload;
};
add_filter( 'wp_handle_upload_prefilter', $wpide_user_folder_on );
add_filter( 'wp_handle_sideload_prefilter', $wpide_user_folder_on );
add_filter( 'wp_handle_upload', $wpide_user_folder_off );
add_filter( 'wp_handle_sideload', $wpide_user_folder_off );
```

## Notes

Only affects new uploads; existing files stay where they are. Uses the user's nicename, never their email.

## How to use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find "Store Each User's Uploads in Their Own Folder" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
