Wordpress - What's the difference between get_site_option and get_blog_option?

get_option() returns an option for the current blog.

In single site installation, the current blog is the only blog. So get get_option() returns the option for it.


get_site_option() is used to retrieve an option network-wide. It means that you can get the same option from any site of the network.

When this function is used in single installation, it normally returns the same thing of get_option(). The value may change because get_site_option() trigger filter hooks that are not triggered by get_option().

Note that once the $wpdb->options table is blog-specific, network-wide options are stored in the $wpdb->sitemeta table, that is specific of multisite installations.


get_blog_option() is the only among the three functions that doesn't receive the option name as 1st argument, but its 1st argument is $blog_id.

In fact, it is used in multisite installations to retrieve an option from a specific blog whose the id is known.

What this function does is:

switch_to_blog( $blog_id );
$value = get_option( $option, $default );
restore_current_blog();

return $value;

If $blog_id is the same of current blog id, WordPress just skips the switch_to_blog part and just calls get_option().

This function is defined in the file wp-includes/ms-blogs.php that is loaded only for multisite installation, so get_blog_option() is not defined in single site installations.


get_site_option() - Gets a network wide option. This option is usually added in the Network Admin Settings section of a multisite set-up. If I had 50 sites, it would be a pain to go to 50 different sites and set the same option value. Instead I could set the option value once and have it apply across the network for all sites. See http://codex.wordpress.org/Function_Reference/get_site_option

get_blog_option() - Lets you get the value of an option for a specific site. One example might be to get the value of a user specific option for each site. So I could get all of the sites that the user belongs too, loop over the list of site IDs, and use get_blog_option() passing the blog_id and option name and get back the result. It's a convenience function that pretty much does the following:

switch_to_blog( $id ); $value = get_option( $option_name ); restore_current_blog();

See http://codex.wordpress.org/Function_Reference/get_blog_option

tl;dr: get_site_option() gets a network wide value, get_blog_option() gets a specific value for a given site without needing to switch to that site first on your own.

Tags:

Multisite