Directly from source for pluggable.php
:
<?php
/**
* These functions can be replaced via plugins. If plugins do not redefine these
* functions, then these will be used instead.
*
* @package WordPress
*/
?>
So, there’s your answer, the functions in pluggable.php
are intended to be overridden by Plugins.
Re: load order:
See this post by Konstantin Kovshenin. The relevant points (10-15):
wp_get_active_and_valid_plugins()
retrieves the list of all active plugin files for loading and includes them. This is the point where your plugin code gets executed, functions, classes defined, etc.- Includes
wp-includes/wp-pluggable.php
andwp-includes/wp-pluggable-deprecated.php
which include functions (and deprecated functions) that can be redefined by plugins. Likewp_mail()
for more advanced mailing,wp_authenticate()
for alternative authentication methods, etc.wp_set_internal_encoding()
is called to set the internal encoding according to the blog_charset option.wp_cache_postload()
is called if object caching is enabled.- At this point a
plugins_loaded
action is fired. This is the very first action (after muplugins_loaded fired before loading the non-multi-site WordPress plugins) that you can hook into, it comes before the init because WordPress has not been initialized yet, at least not fully.
So, simplified:
- Plugins are loaded
pluggable.php
is loadedplugins_loaded
action is fired
Which is the expected order.
(Note: this all takes place in wp-settings.php
.)