2

I have a wordpress multisite, where I would like all the images uploaded through the main site (mysite.com) to be accessible to sub1.mysite.com and sub2.mysite.com. All the images should be in one folder without subdirectory (e.g: wp-content/uploads/image.jpg). I tried the bellow function, but my images for subdomains are uploaded to wp-content/uploads/sites/#blog_id/

function wpse_16722_upload_dir( $args ) {
    $newdir = '/';

    $args['path']    = str_replace( $args['subdir'], '', $args['path'] ); //remove default subdir
    $args['url']     = str_replace( $args['subdir'], '', $args['url'] );      
    $args['subdir']  = $newdir;
    $args['path']   .= $newdir; 
    $args['url']    .= $newdir; 

    return $args;
}
add_filter( 'upload_dir', 'wpse_16722_upload_dir' );
2
  • In MultiSite, wp_upload_dir appends the site-specific sub-directory directly on the path argument. subdir will be empty (or the year/month), so str_replace'ing it will have no effect. Do you want all uploads in the root folder, or just for the main site? Jun 6 '14 at 8:50
  • Thanks TheDeadMedic. Yes I want all uploads in one folder.
    – Totem
    Jun 6 '14 at 21:42
7

This will force uploads for all sites to the wp-content/uploads directory. Sub-directories (like year/month) will still exist (if the setting is enabled).

/**
 * Force all network uploads to reside in "wp-content/uploads", and by-pass
 * "files" URL rewrite for site-specific directories.
 * 
 * @link    http://wordpress.stackexchange.com/q/147750/1685
 * 
 * @param   array   $dirs
 * @return  array
 */
function wpse_147750_upload_dir( $dirs ) {
    $dirs['baseurl'] = network_site_url( '/wp-content/uploads' );
    $dirs['basedir'] = ABSPATH . 'wp-content/uploads';
    $dirs['path'] = $dirs['basedir'] . $dirs['subdir'];
    $dirs['url'] = $dirs['baseurl'] . $dirs['subdir'];

    return $dirs;
}

add_filter( 'upload_dir', 'wpse_147750_upload_dir' );
3
  • Hi, just wondering where this code should go? If it's in the functions.php file, should it be the main site's functions.php? Sep 17 '16 at 16:22
  • Did you find out where that code goes? inside every subdirectory's functions.php?
    – Ashkan
    Aug 20 '20 at 15:28
  • The above function and add_filter() call goes into your theme's functions.php file. Assuming all sites in the multisite network are using the same theme, it only needs to be in that shared theme's functions.php file.
    – Martin_W
    Nov 23 '20 at 7:44

Not the answer you're looking for? Browse other questions tagged or ask your own question.