From 6acd4d4c16efc0b86aa240329ec6fd60762d1435 Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Tue, 1 Jun 2021 00:00:58 +0000 Subject: [PATCH] Docs: Improve documentation for `get_option()`. Clean up, clarify the returned types and the exceptions, and add few examples. Props ReneHermi, johnbillion, azaozz See #51278 Built from https://develop.svn.wordpress.org/trunk@51050 git-svn-id: http://core.svn.wordpress.org/trunk@50659 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/option.php | 64 +++++++++++++++++++++++++++++++++++------ wp-includes/version.php | 2 +- 2 files changed, 56 insertions(+), 10 deletions(-) diff --git a/wp-includes/option.php b/wp-includes/option.php index 8692db7199..412a47dc8a 100644 --- a/wp-includes/option.php +++ b/wp-includes/option.php @@ -9,15 +9,58 @@ /** * Retrieves an option value based on an option name. * - * If the option does not exist or does not have a value, then the return value - * will be false. This is useful to check whether you need to install an option - * and is commonly used during installation of plugin options and to test - * whether upgrading is required. + * 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 {@see add_option} which will not overwrite + * existing options. * - * If the option was serialized then it will be unserialized when it is returned. + * Not initializing an option and using the boolean false as a return value + * is a bad practice as it triggers an additional database query. * - * Any scalar values will be returned as strings. You may coerce the return type of - * a given option by registering an {@see 'option_$option'} filter callback. + * 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: + * 1. When the option has not been saved in the database, the default value + * {@see get_option} is returned if provided. If not, boolean `false` is returned. + * 2. When one of the Options API filters is used: {@see pre_option_{$option}}, + * {@see default_option_{$option}}, and {@see option_{$option}}, the returned + * value may not match the expected type. + * 3. When the option has just been saved in the database, and {@see 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` returns `string(0) ""` + * `true` returns `string(1) "1"` + * `0` returns `string(1) "0"` + * `1` returns `string(1) "1"` + * `'0'` returns `string(1) "0"` + * `'1'` returns `string(1) "1"` + * `null` returns `string(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 + * } * * @since 1.5.0 * @@ -25,8 +68,11 @@ * * @param string $option Name of the option to retrieve. Expected to not be SQL-escaped. * @param mixed $default Optional. Default value to return if the option does not exist. - * @return mixed Value set for the option. A value of any type may be returned, including - * array, boolean, float, integer, null, object, and string. + * @return mixed Value of the option. A value of any type may be returned, including + * scalar (string, boolean, float, integer), null, array, object. + * 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. */ function get_option( $option, $default = false ) { global $wpdb; diff --git a/wp-includes/version.php b/wp-includes/version.php index 20301c80da..1ac856ad59 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -13,7 +13,7 @@ * * @global string $wp_version */ -$wp_version = '5.8-alpha-51049'; +$wp_version = '5.8-alpha-51050'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.