[wp-trac] [WordPress Trac] #21612: wp-settings loads plugins before pluggable.php is included

WordPress Trac wp-trac at lists.automattic.com
Thu Aug 16 19:17:00 UTC 2012


#21612: wp-settings loads plugins before pluggable.php is included
--------------------------+------------------------------
 Reporter:  kingjeffrey   |       Owner:
     Type:  defect (bug)  |      Status:  new
 Priority:  normal        |   Milestone:  Awaiting Review
Component:  General       |     Version:  3.4.1
 Severity:  normal        |  Resolution:
 Keywords:                |
--------------------------+------------------------------
Description changed by SergeyBiryukov:

Old description:

> When manually initializing WordPress (like in a page that handles AJAX
> requests) to access all WordPress functions, it is typical to begin the
> file with:
>
> `
>         define('WP_USE_THEMES', FALSE);
>         require($_SERVER['DOCUMENT_ROOT'] . '/wp-blog-header.php');
> `
>
> However, if a plugin calls the `get_userdata()` function, the page will
> deliver this fatal error:
>
> `
>         Fatal error: Call to undefined function get_userdata() in
> [...]/wp-includes/user.php on line 1402
> `
>
> The "Maintenance" plugin is an example of one that causes this issue.
>
> When the plugin is loaded in `wp-settings.php` line 198, it calls the
> `get_userdata()` function. But the `get_userdata()` function is not
> defined until `wp-includes/pluggable.php` is included on line 202 of `wp-
> settings`.
>
> So this issue is not limited to calling `get_userdata()`, but any
> function defined in `wp-includes/pluggable.php`.
>
> A simple fix to this, assuming `wp-includes/pluggable.php` does not
> depend on the plugins being loaded (which it very may well), is to swap
> the order of loading in `wp-settings.php`

New description:

 When manually initializing WordPress (like in a page that handles AJAX
 requests) to access all WordPress functions, it is typical to begin the
 file with:

 {{{
         define('WP_USE_THEMES', FALSE);
         require($_SERVER['DOCUMENT_ROOT'] . '/wp-blog-header.php');
 }}}

 However, if a plugin calls the `get_userdata()` function, the page will
 deliver this fatal error:

 {{{
         Fatal error: Call to undefined function get_userdata() in
 [...]/wp-includes/user.php on line 1402
 }}}

 The "Maintenance" plugin is an example of one that causes this issue.

 When the plugin is loaded in `wp-settings.php` line 198, it calls the
 `get_userdata()` function. But the `get_userdata()` function is not
 defined until `wp-includes/pluggable.php` is included on line 202 of `wp-
 settings`.

 So this issue is not limited to calling `get_userdata()`, but any function
 defined in `wp-includes/pluggable.php`.

 A simple fix to this, assuming `wp-includes/pluggable.php` does not depend
 on the plugins being loaded (which it very may well), is to swap the order
 of loading in `wp-settings.php`

--

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


More information about the wp-trac mailing list