[wp-trac] [WordPress Trac] #40623: Investigate new file structure for Multisite functionality

WordPress Trac noreply at wordpress.org
Mon May 1 17:51:05 UTC 2017

#40623: Investigate new file structure for Multisite functionality
 Reporter:  flixos90            |      Owner:
     Type:  defect (bug)        |     Status:  new
 Priority:  normal              |  Milestone:  Awaiting Review
Component:  Networks and Sites  |    Version:
 Severity:  normal              |   Keywords:
  Focuses:  multisite           |
 Currently core multisite functionality resides in the following files:

 '''Loaded early:'''

 * `class-wp-site-query.php`
 * `class-wp-network-query.php`
 * `ms-blogs.php`

 '''Bootstrap File:'''

 * `ms-settings.php`

 '''Loaded by bootstrap file:'''

 * `class-wp-network.php`
 * `class-wp-site.php`
 * `ms-load.php`
 * `ms-default-constants.php`

 '''Loaded after WordPress Core stuff:'''

 * `ms-functions.php`
 * `ms-default-filters.php`
 * `ms-deprecated.php`

 This structure and loading order is problematic for several reasons.

 1. The functionality is not clearly separated. File names (particularly
 `ms-blogs.php` and `ms-functions.php` provide no idea (or confusion about)
 what they contain. For example `ms-blogs.php` contains read functionality
 for sites and networks plus a bit of updating site functions (the old
 `*_blog_details()` stuff), `ms-functions.php` contains functions for
 creating sites and users.
 2. Future improvements (such as #37923 and #25344) run into problems since
 they need to declare new functions in `ms-blogs.php` which require other
 functions that are declared in Core files that are loaded after it.
 3. While `ms-settings.php` is the multisite bootstrap file just as `wp-
 settings.php` loads the regular Core functionality, `ms-settings.php` is
 loaded before most parts of Core, which feels weird to me and may cause
 problems (see 2. above).

 I think we should find a way to improve this through a more clarifying
 file structure and loading order. Some ideas I have:
 * Introduce files `ms-site.php` and `ms-network.php` and move all basic
 API functions for that specific area into them (those files would be
 similar like `post.php` and `taxonomy.php` for example). `ms-site.php`
 should for example contain things like `get_site()`, `get_sites()`,
 related cache functions, functions such as those created in #40364,
 `*_site_meta()` functions (if #37923 makes it into Core); `ms-network.php`
 would contain `get_network()`, `get_networks()`, related cache functions,
 `*_network_meta()` functions (if #25344 makes it into Core) etc. I think
 we should only put "new" functions into those files (with "new" I mean
 more recent things that follow the current naming conventions in
 Multisite). We might also add an `ms-user.php` file.
 * Load all Multisite functionality after Core functionality. This would
 solve issues where Core functionality needed is not available in early-
 loaded files, and also that other Multisite functionality is not available
 (for example you shouldn't currently call `ms-functions.php` functions
 from `ms-blogs.php`. We have to be careful with BC, edge-cases and all the
 other things that might come up when changing loading order - so not sure
 whether this is possible, but it's something to think about.

 Let's think about it.

Ticket URL: <https://core.trac.wordpress.org/ticket/40623>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform

More information about the wp-trac mailing list