[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