[wp-trac] [WordPress Trac] #21459: Cleanup switch_to_blog() and restore_current_blog()

WordPress Trac wp-trac at lists.automattic.com
Tue Aug 7 19:53:47 UTC 2012


#21459: Cleanup switch_to_blog() and restore_current_blog()
-------------------------+--------------------
 Reporter:  ryan         |       Owner:
     Type:  enhancement  |      Status:  new
 Priority:  normal       |   Milestone:  3.5
Component:  Multisite    |     Version:  3.4.1
 Severity:  normal       |  Resolution:
 Keywords:  has-patch    |
-------------------------+--------------------

Comment (by ryan):

 Summary of changes in 21459.4.diff

 wp-includes/admin-bar.php:

  * Replace get_admin_url() and get_home_url() with admin_url() and
 home_url() inside on switch/restore.  Likewise replace
 current_user_can_for_blog() with current_user_can(). This avoids doing
 multiple switch restores.

 wp-includes/ms-blogs.php:

  * Deprecate the $validate argument to switch_to_blog(). This avoid a not
 very necessary call to get_blog_details() possibly saving a few queries.
  * Use $_wp_switched and $_wp_switched_stack instead of $switched and
 $switched_stack to make it less likely these globals will be stomped.
  * Use GLOBALS to access blog_id and other globals. I've preferred this
 style lately since it makes it obvious a global is being used and avoids
 global blog_id being stomped by a local variable.
  * Lose some is_object() checks. wp_get_current_user() always returns an
 object, for example.
  * Call the new WP_Roles::reinit() method.

 wp-includes/class-wp-xmlrpc-server.php:

  * Replace current_user_can_for_blog() with current_user_can() and move it
 inside the switch/restore pair. This eliminates a switch/restore.

 wp-includes/capabilities.php:

  * Use array_keys() instead of $role => $data since $data is unused. I
 *think* this is a bit faster.
  * Introduce WP_Roles::reinit(). This reinitializes WP_Roles and is used
 after switch_to_blog() has already update the blog ID in the wpdb object.
 If a global roles array is being used instead of the db, reinit is
 skipped.
  * current_user_can_for_blog() now does a switch/restore. It didn't before
 meaning it could be reinitializing the user with the wrong role
 information for the current blog.

 wp-includes/ms-settings.php:

  * Define $_wp_switched_stack and $_wp_switched. This way switch_to_blog()
 and restore_current_blog() can rely on it being set.

 wp-settings.php:

  * Instantiate the WP_Roles global. This was it is always defined during
 init. To remove the WP_Roles checks from WP_Role and WP_User  this would
 probably have to move before plugins are loaded, which might not be a good
 thing.

-- 
Ticket URL: <http://core.trac.wordpress.org/ticket/21459#comment:4>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list