[wp-trac] [WordPress Trac] #63440: 6.8.1 Multisite: Uncaught TypeError: array_keys(): Argument #1 ($array) must be of type array, string given in wp-includes/class-wp-roles.php:291

WordPress Trac noreply at wordpress.org
Tue May 13 15:38:25 UTC 2025


#63440: 6.8.1 Multisite: Uncaught TypeError: array_keys(): Argument #1 ($array)
must be of type array, string given in wp-includes/class-wp-roles.php:291
-----------------------------+----------------------------------------
 Reporter:  thejasonator     |       Owner:  (none)
     Type:  defect (bug)     |      Status:  new
 Priority:  normal           |   Milestone:  Awaiting Review
Component:  Role/Capability  |     Version:
 Severity:  major            |  Resolution:
 Keywords:                   |     Focuses:  administration, multisite
-----------------------------+----------------------------------------
Changes (by sabernhardt):

 * focuses:   => administration, multisite
 * component:  Administration => Role/Capability


Old description:

> I held off upgrading to 6.8 because of the multisite issue with older
> sites. I saw that bug was fixed in 6.8.1, but on upgrading I saw this
> error:
>
> Fatal error: Uncaught TypeError: array_keys(): Argument #1 ($array) must
> be of type array, string given in /usr/local/lsws/Wordpress/htdocs/wp-
> includes/class-wp-roles.php:291 Stack trace: #0
> /usr/local/lsws/Wordpress/htdocs/wp-includes/class-wp-roles.php(291):
> array_keys() #1 /usr/local/lsws/Wordpress/htdocs/wp-includes/class-wp-
> roles.php(332): WP_Roles->init_roles() #2
> /usr/local/lsws/Wordpress/htdocs/wp-includes/ms-blogs.php(707):
> WP_Roles->for_site() #3 /usr/local/lsws/Wordpress/htdocs/wp-includes
> /class-wp-hook.php(326): wp_switch_roles_and_user() #4
> /usr/local/lsws/Wordpress/htdocs/wp-includes/class-wp-hook.php(348):
> WP_Hook->apply_filters() #5 /usr/local/lsws/Wordpress/htdocs/wp-
> includes/plugin.php(517): WP_Hook->do_action() #6
> /usr/local/lsws/Wordpress/htdocs/wp-includes/ms-blogs.php(587):
> do_action() #7 /usr/local/lsws/Wordpress/htdocs/wp-includes/admin-
> bar.php(685): switch_to_blog() #8 /usr/local/lsws/Wordpress/htdocs/wp-
> includes/class-wp-hook.php(324): wp_admin_bar_my_sites_menu() #9
> /usr/local/lsws/Wordpress/htdocs/wp-includes/class-wp-hook.php(348):
> WP_Hook->apply_filters() #10 /usr/local/lsws/Wordpress/htdocs/wp-
> includes/plugin.php(565): WP_Hook->do_action() #11
> /usr/local/lsws/Wordpress/htdocs/wp-includes/admin-bar.php(97):
> do_action_ref_array() #12 /usr/local/lsws/Wordpress/htdocs/wp-includes
> /class-wp-hook.php(324): wp_admin_bar_render() #13
> /usr/local/lsws/Wordpress/htdocs/wp-includes/class-wp-hook.php(348):
> WP_Hook->apply_filters() #14 /usr/local/lsws/Wordpress/htdocs/wp-
> includes/plugin.php(517): WP_Hook->do_action() #15
> /usr/local/lsws/Wordpress/htdocs/wp-admin/admin-header.php(277):
> do_action() #16 /usr/local/lsws/Wordpress/htdocs/wp-admin/edit-form-
> blocks.php(376): require_once('...') #17 /usr/local/lsws/Wordpress/htdocs
> /wp-admin/post.php(187): require('...') #18 {main} thrown in
> /usr/local/lsws/Wordpress/htdocs/wp-includes/class-wp-roles.php on line
> 291
>
> Strangely, the side admin bar renders, but the top admin bar doesn't.

New description:

 I held off upgrading to 6.8 because of the multisite issue with older
 sites. I saw that bug was fixed in 6.8.1, but on upgrading I saw this
 error:

 {{{
 Fatal error: Uncaught TypeError: array_keys(): Argument #1 ($array) must
 be of type array, string given in /.../wp-includes/class-wp-roles.php:291
 Stack trace:
 #0 /.../wp-includes/class-wp-roles.php(291): array_keys()
 #1 /.../wp-includes/class-wp-roles.php(332): WP_Roles->init_roles()
 #2 /.../wp-includes/ms-blogs.php(707): WP_Roles->for_site()
 #3 /.../wp-includes/class-wp-hook.php(326): wp_switch_roles_and_user()
 #4 /.../wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters()
 #5 /.../wp-includes/plugin.php(517): WP_Hook->do_action()
 #6 /.../wp-includes/ms-blogs.php(587): do_action()
 #7 /.../wp-includes/admin-bar.php(685): switch_to_blog()
 #8 /.../wp-includes/class-wp-hook.php(324): wp_admin_bar_my_sites_menu()
 #9 /.../wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters()
 #10 /.../wp-includes/plugin.php(565): WP_Hook->do_action()
 #11 /.../wp-includes/admin-bar.php(97): do_action_ref_array()
 #12 /.../wp-includes/class-wp-hook.php(324): wp_admin_bar_render()
 #13 /.../wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters()
 #14 /.../wp-includes/plugin.php(517): WP_Hook->do_action()
 #15 /.../wp-admin/admin-header.php(277): do_action()
 #16 /.../wp-admin/edit-form-blocks.php(376): require_once('...')
 #17 /.../wp-admin/post.php(187): require('...')
 #18 {main} thrown in /.../wp-includes/class-wp-roles.php on line 291
 }}}

 Strangely, the side admin bar renders, but the top admin bar doesn't.

--

Comment:

 I'll move this to the "Role/Capability" component, but the issue involves
 `switch_to_blog()` in the toolbar's `wp_admin_bar_my_sites_menu()`
 function.

 Do you find the error on any page (administration and/or front end), or is
 it only certain pages?

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/63440#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list