get_option( string $option, mixed $default_value = false )
Retrieves an option value based on an option name.
Description
If the option does not exist, and a default value is not provided, boolean false is returned. This could be used to check whether you need to initialize an option during installation of a plugin, however that can be done better by using add_option() which will not overwrite existing options.
Not initializing an option and using boolean false
as a return value is a bad practice as it triggers an additional database query.
The type of the returned value can be different from the type that was passed when saving or updating the option. If the option value was serialized, then it will be unserialized when it is returned. In this case the type will be the same. For example, storing a non-scalar value like an array will return the same array.
In most cases non-string scalar and null values will be converted and returned as string equivalents.
Exceptions:
- When the option has not been saved in the database, the
$default_value
value is returned if provided. If not, booleanfalse
is returned. - When one of the Options API filters is used: ‘pre_option_$option’, ‘default_option_$option’, or ‘option_$option’, the returned value may not match the expected type.
- When the option has just been saved in the database, and get_option() is used right after, non-string scalar and null values are not converted to string equivalents and the original type is returned.
Examples:
When adding options like this: add_option( 'my_option_name', 'value' )
and then retrieving them with get_option( 'my_option_name' )
, the returned values will be:
false
returnsstring(0) ""
true
returnsstring(1) "1"
0
returnsstring(1) "0"
1
returnsstring(1) "1"
'0'
returnsstring(1) "0"
'1'
returnsstring(1) "1"
null
returnsstring(0) ""
When adding options with non-scalar values like add_option( 'my_array', array( false, 'str', null ) )
, the returned value will be identical to the original as it is serialized before saving it in the database:
array(3) {
[0] => bool(false)
[1] => string(3) "str"
[2] => NULL
}
Parameters
- $option
-
(Required) Name of the option to retrieve. Expected to not be SQL-escaped.
- $default_value
-
(Optional) Default value to return if the option does not exist.
Default value: false
Return
(mixed) Value of the option. A value of any type may be returned, including scalar (string, boolean, float, integer), null, array, object.<br> Scalar and null values will be returned as strings as long as they originate from a database stored option value. If there is no option in the database, boolean false
is returned.
Source
File: wp-includes/option.php
function get_option( $option, $default = false ) {
global $wpdb;
$option = trim( $option );
if ( empty( $option ) )
return false;
/**
* Filters the value of an existing option before it is retrieved.
*
* The dynamic portion of the hook name, `$option`, refers to the option name.
*
* Passing a truthy value to the filter will short-circuit retrieving
* the option value, returning the passed value instead.
*
* @since WP-1.5.0
* @since WP-4.4.0 The `$option` parameter was added.
* @since WP-4.9.0 The `$default` parameter was added.
*
*
* @param bool|mixed $pre_option The value to return instead of the option value. This differs from
* `$default`, which is used as the fallback value in the event the option
* doesn't exist elsewhere in get_option(). Default false (to skip past the
* short-circuit).
* @param string $option Option name.
* @param mixed $default The fallback value to return if the option does not exist.
* Default is false.
*/
$pre = apply_filters( "pre_option_{$option}", false, $option, $default );
if ( false !== $pre )
return $pre;
if ( defined( 'WP_SETUP_CONFIG' ) )
return false;
// Distinguish between `false` as a default, and not passing one.
$passed_default = func_num_args() > 1;
if ( ! wp_installing() ) {
// prevent non-existent options from triggering multiple queries
$notoptions = wp_cache_get( 'notoptions', 'options' );
if ( isset( $notoptions[ $option ] ) ) {
/**
* Filters the default value for an option.
*
* The dynamic portion of the hook name, `$option`, refers to the option name.
*
* @since WP-3.4.0
* @since WP-4.4.0 The `$option` parameter was added.
* @since WP-4.7.0 The `$passed_default` parameter was added to distinguish between a `false` value and the default parameter value.
*
* @param mixed $default The default value to return if the option does not exist
* in the database.
* @param string $option Option name.
* @param bool $passed_default Was `get_option()` passed a default value?
*/
return apply_filters( "default_option_{$option}", $default, $option, $passed_default );
}
$alloptions = wp_load_alloptions();
if ( isset( $alloptions[$option] ) ) {
$value = $alloptions[$option];
} else {
$value = wp_cache_get( $option, 'options' );
if ( false === $value ) {
$row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );
// Has to be get_row instead of get_var because of funkiness with 0, false, null values
if ( is_object( $row ) ) {
$value = $row->option_value;
wp_cache_add( $option, $value, 'options' );
} else { // option does not exist, so we must cache its non-existence
if ( ! is_array( $notoptions ) ) {
$notoptions = array();
}
$notoptions[$option] = true;
wp_cache_set( 'notoptions', $notoptions, 'options' );
/** This filter is documented in wp-includes/option.php */
return apply_filters( "default_option_{$option}", $default, $option, $passed_default );
}
}
}
} else {
$suppress = $wpdb->suppress_errors();
$row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );
$wpdb->suppress_errors( $suppress );
if ( is_object( $row ) ) {
$value = $row->option_value;
} else {
/** This filter is documented in wp-includes/option.php */
return apply_filters( "default_option_{$option}", $default, $option, $passed_default );
}
}
// If home is not set use siteurl.
if ( 'home' == $option && '' == $value )
return get_option( 'siteurl' );
if ( in_array( $option, array('siteurl', 'home', 'category_base', 'tag_base') ) )
$value = untrailingslashit( $value );
/**
* Filters the value of an existing option.
*
* The dynamic portion of the hook name, `$option`, refers to the option name.
*
* @since WP-1.5.0 As 'option_' . $setting
* @since WP-3.0.0
* @since WP-4.4.0 The `$option` parameter was added.
*
* @param mixed $value Value of the option. If stored serialized, it will be
* unserialized prior to being returned.
* @param string $option Option name.
*/
return apply_filters( "option_{$option}", maybe_unserialize( $value ), $option );
}
Changelog
Version | Description |
---|---|
1.5.0 | Introduced. |