diff --git a/src/wp-admin/includes/plugin.php b/src/wp-admin/includes/plugin.php index c4cdb845a4..9a4d0cb29b 100644 --- a/src/wp-admin/includes/plugin.php +++ b/src/wp-admin/includes/plugin.php @@ -1764,141 +1764,6 @@ function user_can_access_admin_page() { /* Whitelist functions */ -/** - * Register a setting and its data. - * - * @since 2.7.0 - * @since 4.7.0 `$args` can be passed to set flags on the setting, similar to `register_meta()`. - * - * @global array $new_whitelist_options - * @global array $wp_registered_settings - * - * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. - * Default whitelisted option key names include "general," "discussion," and "reading," among others. - * @param string $option_name The name of an option to sanitize and save. - * @param array $args { - * Data used to describe the setting when registered. - * - * @type string $type The type of data associated with this setting. - * @type string $description A description of the data attached to this setting. - * @type callable $sanitize_callback A callback function that sanitizes the option's value. - * @type bool $show_in_rest Whether data associated with this setting should be included in the REST API. - * } - */ -function register_setting( $option_group, $option_name, $args = array() ) { - global $new_whitelist_options, $wp_registered_settings; - - $defaults = array( - 'type' => 'string', - 'group' => $option_group, - 'description' => '', - 'sanitize_callback' => null, - 'show_in_rest' => false, - ); - - // Back-compat: old sanitize callback is added. - if ( is_callable( $args ) ) { - $args = array( - 'sanitize_callback' => $args, - ); - } - - /** - * Filters the registration arguments when registering a setting. - * - * @since 4.7.0 - * - * @param array $args Array of setting registration arguments. - * @param array $defaults Array of default arguments. - * @param string $option_group Setting group. - * @param string $option_name Setting name. - */ - $args = apply_filters( 'register_setting_args', $args, $defaults, $option_group, $option_name ); - $args = wp_parse_args( $args, $defaults ); - - if ( ! is_array( $wp_registered_settings ) ) { - $wp_registered_settings = array(); - } - - if ( 'misc' == $option_group ) { - _deprecated_argument( __FUNCTION__, '3.0.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); - $option_group = 'general'; - } - - if ( 'privacy' == $option_group ) { - _deprecated_argument( __FUNCTION__, '3.5.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); - $option_group = 'reading'; - } - - $new_whitelist_options[ $option_group ][] = $option_name; - if ( ! empty( $args['sanitize_callback'] ) ) { - add_filter( "sanitize_option_{$option_name}", $args['sanitize_callback'] ); - } - - $wp_registered_settings[ $option_name ] = $args; -} - -/** - * Unregister a setting. - * - * @since 2.7.0 - * @since 4.7.0 `$sanitize_callback` was deprecated. The callback from `register_setting()` is now used instead. - * - * @global array $new_whitelist_options - * - * @param string $option_group The settings group name used during registration. - * @param string $option_name The name of the option to unregister. - * @param callable $deprecated Deprecated. - */ -function unregister_setting( $option_group, $option_name, $deprecated = '' ) { - global $new_whitelist_options, $wp_registered_settings; - - if ( 'misc' == $option_group ) { - _deprecated_argument( __FUNCTION__, '3.0.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); - $option_group = 'general'; - } - - if ( 'privacy' == $option_group ) { - _deprecated_argument( __FUNCTION__, '3.5.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); - $option_group = 'reading'; - } - - $pos = array_search( $option_name, (array) $new_whitelist_options[ $option_group ] ); - if ( $pos !== false ) { - unset( $new_whitelist_options[ $option_group ][ $pos ] ); - } - if ( '' !== $deprecated ) { - _deprecated_argument( __FUNCTION__, '4.7.0', __( '$sanitize_callback is deprecated. The callback from register_setting() is used instead.' ) ); - remove_filter( "sanitize_option_{$option_name}", $deprecated ); - } - - if ( isset( $wp_registered_settings[ $option_name ] ) ) { - // Remove the sanitize callback if one was set during registration. - if ( ! empty( $wp_registered_settings[ $option_name ]['sanitize_callback'] ) ) { - remove_filter( "sanitize_option_{$option_name}", $wp_registered_settings[ $option_name ]['sanitize_callback'] ); - } - - unset( $wp_registered_settings[ $option_name ] ); - } -} - -/** - * Retrieves an array of registered settings. - * - * @since 4.7.0 - * - * @return array List of registered settings, keyed by option name. - */ -function get_registered_settings() { - global $wp_registered_settings; - - if ( ! is_array( $wp_registered_settings ) ) { - return array(); - } - - return $wp_registered_settings; -} - /** * Refreshes the value of the options whitelist available via the 'whitelist_options' hook. * diff --git a/src/wp-includes/option.php b/src/wp-includes/option.php index 2293b0154f..4c1796f067 100644 --- a/src/wp-includes/option.php +++ b/src/wp-includes/option.php @@ -1686,3 +1686,138 @@ function set_site_transient( $transient, $value, $expiration = 0 ) { } return $result; } + +/** + * Register a setting and its data. + * + * @since 2.7.0 + * @since 4.7.0 `$args` can be passed to set flags on the setting, similar to `register_meta()`. + * + * @global array $new_whitelist_options + * @global array $wp_registered_settings + * + * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. + * Default whitelisted option key names include "general," "discussion," and "reading," among others. + * @param string $option_name The name of an option to sanitize and save. + * @param array $args { + * Data used to describe the setting when registered. + * + * @type string $type The type of data associated with this setting. + * @type string $description A description of the data attached to this setting. + * @type callable $sanitize_callback A callback function that sanitizes the option's value. + * @type bool $show_in_rest Whether data associated with this setting should be included in the REST API. + * } + */ +function register_setting( $option_group, $option_name, $args = array() ) { + global $new_whitelist_options, $wp_registered_settings; + + $defaults = array( + 'type' => 'string', + 'group' => $option_group, + 'description' => '', + 'sanitize_callback' => null, + 'show_in_rest' => false, + ); + + // Back-compat: old sanitize callback is added. + if ( is_callable( $args ) ) { + $args = array( + 'sanitize_callback' => $args, + ); + } + + /** + * Filters the registration arguments when registering a setting. + * + * @since 4.7.0 + * + * @param array $args Array of setting registration arguments. + * @param array $defaults Array of default arguments. + * @param string $option_group Setting group. + * @param string $option_name Setting name. + */ + $args = apply_filters( 'register_setting_args', $args, $defaults, $option_group, $option_name ); + $args = wp_parse_args( $args, $defaults ); + + if ( ! is_array( $wp_registered_settings ) ) { + $wp_registered_settings = array(); + } + + if ( 'misc' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.0.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); + $option_group = 'general'; + } + + if ( 'privacy' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.5.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); + $option_group = 'reading'; + } + + $new_whitelist_options[ $option_group ][] = $option_name; + if ( ! empty( $args['sanitize_callback'] ) ) { + add_filter( "sanitize_option_{$option_name}", $args['sanitize_callback'] ); + } + + $wp_registered_settings[ $option_name ] = $args; +} + +/** + * Unregister a setting. + * + * @since 2.7.0 + * @since 4.7.0 `$sanitize_callback` was deprecated. The callback from `register_setting()` is now used instead. + * + * @global array $new_whitelist_options + * + * @param string $option_group The settings group name used during registration. + * @param string $option_name The name of the option to unregister. + * @param callable $deprecated Deprecated. + */ +function unregister_setting( $option_group, $option_name, $deprecated = '' ) { + global $new_whitelist_options, $wp_registered_settings; + + if ( 'misc' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.0.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); + $option_group = 'general'; + } + + if ( 'privacy' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.5.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); + $option_group = 'reading'; + } + + $pos = array_search( $option_name, (array) $new_whitelist_options[ $option_group ] ); + if ( $pos !== false ) { + unset( $new_whitelist_options[ $option_group ][ $pos ] ); + } + if ( '' !== $deprecated ) { + _deprecated_argument( __FUNCTION__, '4.7.0', __( '$sanitize_callback is deprecated. The callback from register_setting() is used instead.' ) ); + remove_filter( "sanitize_option_{$option_name}", $deprecated ); + } + + if ( isset( $wp_registered_settings[ $option_name ] ) ) { + // Remove the sanitize callback if one was set during registration. + if ( ! empty( $wp_registered_settings[ $option_name ]['sanitize_callback'] ) ) { + remove_filter( "sanitize_option_{$option_name}", $wp_registered_settings[ $option_name ]['sanitize_callback'] ); + } + + unset( $wp_registered_settings[ $option_name ] ); + } +} + +/** + * Retrieves an array of registered settings. + * + * @since 4.7.0 + * + * @return array List of registered settings, keyed by option name. + */ +function get_registered_settings() { + global $wp_registered_settings; + + if ( ! is_array( $wp_registered_settings ) ) { + return array(); + } + + return $wp_registered_settings; +}