* Default false to skip it.
* @param string $option Option name.
*/
- $pre = apply_filters( 'pre_option_' . $option, false, $option );
+ $pre = apply_filters( "pre_option_{$option}", false, $option );
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' );
*
* @since 3.4.0
* @since 4.4.0 The `$option` parameter was added.
+ * @since 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 );
+ return apply_filters( "default_option_{$option}", $default, $option, $passed_default );
}
$alloptions = wp_load_alloptions();
wp_cache_set( 'notoptions', $notoptions, 'options' );
/** This filter is documented in wp-includes/option.php */
- return apply_filters( 'default_option_' . $option, $default, $option );
+ return apply_filters( 'default_option_' . $option, $default, $option, $passed_default );
}
}
}
$value = $row->option_value;
} else {
/** This filter is documented in wp-includes/option.php */
- return apply_filters( 'default_option_' . $option, $default, $option );
+ return apply_filters( 'default_option_' . $option, $default, $option, $passed_default );
}
}
* unserialized prior to being returned.
* @param string $option Option name.
*/
- return apply_filters( 'option_' . $option, maybe_unserialize( $value ), $option );
+ return apply_filters( "option_{$option}", maybe_unserialize( $value ), $option );
}
/**
* @param mixed $old_value The old option value.
* @param string $option Option name.
*/
- $value = apply_filters( 'pre_update_option_' . $option, $value, $old_value, $option );
+ $value = apply_filters( "pre_update_option_{$option}", $value, $old_value, $option );
/**
* Filters an option before its value is (maybe) serialized and updated.
return false;
/** This filter is documented in wp-includes/option.php */
- if ( apply_filters( 'default_option_' . $option, false, $option ) === $old_value ) {
+ if ( apply_filters( 'default_option_' . $option, false, $option, false ) === $old_value ) {
// Default setting for new options is 'yes'.
if ( null === $autoload ) {
$autoload = 'yes';
$notoptions = wp_cache_get( 'notoptions', 'options' );
if ( !is_array( $notoptions ) || !isset( $notoptions[$option] ) )
/** This filter is documented in wp-includes/option.php */
- if ( apply_filters( 'default_option_' . $option, false, $option ) !== get_option( $option ) )
+ if ( apply_filters( 'default_option_' . $option, false, $option, false ) !== get_option( $option ) )
return false;
$serialized_value = maybe_serialize( $value );
*
* @param string $option Name of the deleted option.
*/
- do_action( "delete_option_$option", $option );
+ do_action( "delete_option_{$option}", $option );
/**
* Fires after an option has been deleted.
*
* @param string $transient Transient name.
*/
- do_action( 'delete_transient_' . $transient, $transient );
+ do_action( "delete_transient_{$transient}", $transient );
if ( wp_using_ext_object_cache() ) {
$result = wp_cache_delete( $transient, 'transient' );
* of the transient, and return the returned value.
* @param string $transient Transient name.
*/
- $pre = apply_filters( 'pre_transient_' . $transient, false, $transient );
+ $pre = apply_filters( "pre_transient_{$transient}", false, $transient );
if ( false !== $pre )
return $pre;
* @param mixed $value Value of transient.
* @param string $transient Transient name.
*/
- return apply_filters( 'transient_' . $transient, $value, $transient );
+ return apply_filters( "transient_{$transient}", $value, $transient );
}
/**
* @param int $expiration Time until expiration in seconds.
* @param string $transient Transient name.
*/
- $value = apply_filters( 'pre_set_transient_' . $transient, $value, $expiration, $transient );
+ $value = apply_filters( "pre_set_transient_{$transient}", $value, $expiration, $transient );
/**
* Filters the expiration for a transient before its value is set.
* @param mixed $value New value of transient.
* @param string $transient Transient name.
*/
- $expiration = apply_filters( 'expiration_of_transient_' . $transient, $expiration, $value, $transient );
+ $expiration = apply_filters( "expiration_of_transient_{$transient}", $expiration, $value, $transient );
if ( wp_using_ext_object_cache() ) {
$result = wp_cache_set( $transient, $value, 'transient', $expiration );
* @param int $expiration Time until expiration in seconds.
* @param string $transient The name of the transient.
*/
- do_action( 'set_transient_' . $transient, $value, $expiration, $transient );
+ do_action( "set_transient_{$transient}", $value, $expiration, $transient );
/**
* Fires after the value for a transient has been set.
*/
function wp_user_settings() {
- if ( ! is_admin() || defined( 'DOING_AJAX' ) ) {
+ if ( ! is_admin() || wp_doing_ajax() ) {
return;
}
*
* @see get_option()
*
- * @global wpdb $wpdb
- * @global object $current_site
+ * @global wpdb $wpdb
*
* @param int $network_id ID of the network. Can be null to default to the current network ID.
* @param string $option Name of option to retrieve. Expected to not be SQL-escaped.
* @return mixed Value set for the option.
*/
function get_network_option( $network_id, $option, $default = false ) {
- global $wpdb, $current_site;
+ global $wpdb;
if ( $network_id && ! is_numeric( $network_id ) ) {
return false;
$network_id = (int) $network_id;
// Fallback to the current network if a network ID is not specified.
- if ( ! $network_id && is_multisite() ) {
- $network_id = $current_site->id;
+ if ( ! $network_id ) {
+ $network_id = get_current_network_id();
}
/**
*
* @since 2.9.0 As 'pre_site_option_' . $key
* @since 3.0.0
- * @since 4.4.0 The `$option` parameter was added
+ * @since 4.4.0 The `$option` parameter was added.
+ * @since 4.7.0 The `$network_id` parameter was added.
*
* @param mixed $pre_option The default value to return if the option does not exist.
* @param string $option Option name.
+ * @param int $network_id ID of the network.
*/
- $pre = apply_filters( 'pre_site_option_' . $option, false, $option );
+ $pre = apply_filters( "pre_site_option_{$option}", false, $option, $network_id );
if ( false !== $pre ) {
return $pre;
*
* @since 3.4.0
* @since 4.4.0 The `$option` parameter was added.
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param mixed $default The value to return if the site option does not exist
- * in the database.
- * @param string $option Option name.
+ * @param mixed $default The value to return if the site option does not exist
+ * in the database.
+ * @param string $option Option name.
+ * @param int $network_id ID of the network.
*/
- return apply_filters( 'default_site_option_' . $option, $default, $option );
+ return apply_filters( "default_site_option_{$option}", $default, $option, $network_id );
}
if ( ! is_multisite() ) {
/** This filter is documented in wp-includes/option.php */
- $default = apply_filters( 'default_site_option_' . $option, $default, $option );
+ $default = apply_filters( 'default_site_option_' . $option, $default, $option, $network_id );
$value = get_option( $option, $default );
} else {
$cache_key = "$network_id:$option";
wp_cache_set( $notoptions_key, $notoptions, 'site-options' );
/** This filter is documented in wp-includes/option.php */
- $value = apply_filters( 'default_site_option_' . $option, $default, $option );
+ $value = apply_filters( 'default_site_option_' . $option, $default, $option, $network_id );
}
}
}
*
* @since 2.9.0 As 'site_option_' . $key
* @since 3.0.0
- * @since 4.4.0 The `$option` parameter was added
+ * @since 4.4.0 The `$option` parameter was added.
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param mixed $value Value of network option.
- * @param string $option Option name.
+ * @param mixed $value Value of network option.
+ * @param string $option Option name.
+ * @param int $network_id ID of the network.
*/
- return apply_filters( 'site_option_' . $option, $value, $option );
+ return apply_filters( "site_option_{$option}", $value, $option, $network_id );
}
/**
*
* @see add_option()
*
- * @global wpdb $wpdb
- * @global object $current_site
+ * @global wpdb $wpdb
*
* @param int $network_id ID of the network. Can be null to default to the current network ID.
* @param string $option Name of option to add. Expected to not be SQL-escaped.
* @return bool False if option was not added and true if option was added.
*/
function add_network_option( $network_id, $option, $value ) {
- global $wpdb, $current_site;
+ global $wpdb;
if ( $network_id && ! is_numeric( $network_id ) ) {
return false;
$network_id = (int) $network_id;
// Fallback to the current network if a network ID is not specified.
- if ( ! $network_id && is_multisite() ) {
- $network_id = $current_site->id;
+ if ( ! $network_id ) {
+ $network_id = get_current_network_id();
}
wp_protect_special_option( $option );
*
* @since 2.9.0 As 'pre_add_site_option_' . $key
* @since 3.0.0
- * @since 4.4.0 The `$option` parameter was added
+ * @since 4.4.0 The `$option` parameter was added.
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param mixed $value Value of network option.
- * @param string $option Option name.
+ * @param mixed $value Value of network option.
+ * @param string $option Option name.
+ * @param int $network_id ID of the network.
*/
- $value = apply_filters( 'pre_add_site_option_' . $option, $value, $option );
+ $value = apply_filters( "pre_add_site_option_{$option}", $value, $option, $network_id );
$notoptions_key = "$network_id:notoptions";
*
* @since 2.9.0 As "add_site_option_{$key}"
* @since 3.0.0
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param string $option Name of the network option.
- * @param mixed $value Value of the network option.
+ * @param string $option Name of the network option.
+ * @param mixed $value Value of the network option.
+ * @param int $network_id ID of the network.
*/
- do_action( 'add_site_option_' . $option, $option, $value );
+ do_action( "add_site_option_{$option}", $option, $value, $network_id );
/**
* Fires after a network option has been successfully added.
*
* @since 3.0.0
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param string $option Name of the network option.
- * @param mixed $value Value of the network option.
+ * @param string $option Name of the network option.
+ * @param mixed $value Value of the network option.
+ * @param int $network_id ID of the network.
*/
- do_action( 'add_site_option', $option, $value );
+ do_action( 'add_site_option', $option, $value, $network_id );
return true;
}
*
* @see delete_option()
*
- * @global wpdb $wpdb
- * @global object $current_site
+ * @global wpdb $wpdb
*
* @param int $network_id ID of the network. Can be null to default to the current network ID.
* @param string $option Name of option to remove. Expected to not be SQL-escaped.
* @return bool True, if succeed. False, if failure.
*/
function delete_network_option( $network_id, $option ) {
- global $wpdb, $current_site;
+ global $wpdb;
if ( $network_id && ! is_numeric( $network_id ) ) {
return false;
$network_id = (int) $network_id;
// Fallback to the current network if a network ID is not specified.
- if ( ! $network_id && is_multisite() ) {
- $network_id = $current_site->id;
+ if ( ! $network_id ) {
+ $network_id = get_current_network_id();
}
/**
* The dynamic portion of the hook name, `$option`, refers to the option name.
*
* @since 3.0.0
- * @since 4.4.0 The `$option` parameter was added
+ * @since 4.4.0 The `$option` parameter was added.
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param string $option Option name.
+ * @param string $option Option name.
+ * @param int $network_id ID of the network.
*/
- do_action( 'pre_delete_site_option_' . $option, $option );
+ do_action( "pre_delete_site_option_{$option}", $option, $network_id );
if ( ! is_multisite() ) {
$result = delete_option( $option );
*
* @since 2.9.0 As "delete_site_option_{$key}"
* @since 3.0.0
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param string $option Name of the network option.
+ * @param string $option Name of the network option.
+ * @param int $network_id ID of the network.
*/
- do_action( 'delete_site_option_' . $option, $option );
+ do_action( "delete_site_option_{$option}", $option, $network_id );
/**
* Fires after a network option has been deleted.
*
* @since 3.0.0
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param string $option Name of the network option.
+ * @param string $option Name of the network option.
+ * @param int $network_id ID of the network.
*/
- do_action( 'delete_site_option', $option );
+ do_action( 'delete_site_option', $option, $network_id );
return true;
}
*
* @see update_option()
*
- * @global wpdb $wpdb
- * @global object $current_site
+ * @global wpdb $wpdb
*
* @param int $network_id ID of the network. Can be null to default to the current network ID.
* @param string $option Name of option. Expected to not be SQL-escaped.
* @return bool False if value was not updated and true if value was updated.
*/
function update_network_option( $network_id, $option, $value ) {
- global $wpdb, $current_site;
+ global $wpdb;
if ( $network_id && ! is_numeric( $network_id ) ) {
return false;
$network_id = (int) $network_id;
// Fallback to the current network if a network ID is not specified.
- if ( ! $network_id && is_multisite() ) {
- $network_id = $current_site->id;
+ if ( ! $network_id ) {
+ $network_id = get_current_network_id();
}
wp_protect_special_option( $option );
*
* @since 2.9.0 As 'pre_update_site_option_' . $key
* @since 3.0.0
- * @since 4.4.0 The `$option` parameter was added
+ * @since 4.4.0 The `$option` parameter was added.
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param mixed $value New value of the network option.
- * @param mixed $old_value Old value of the network option.
- * @param string $option Option name.
+ * @param mixed $value New value of the network option.
+ * @param mixed $old_value Old value of the network option.
+ * @param string $option Option name.
+ * @param int $network_id ID of the network.
*/
- $value = apply_filters( 'pre_update_site_option_' . $option, $value, $old_value, $option );
+ $value = apply_filters( "pre_update_site_option_{$option}", $value, $old_value, $option, $network_id );
if ( $value === $old_value ) {
return false;
*
* @since 2.9.0 As "update_site_option_{$key}"
* @since 3.0.0
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param string $option Name of the network option.
- * @param mixed $value Current value of the network option.
- * @param mixed $old_value Old value of the network option.
+ * @param string $option Name of the network option.
+ * @param mixed $value Current value of the network option.
+ * @param mixed $old_value Old value of the network option.
+ * @param int $network_id ID of the network.
*/
- do_action( 'update_site_option_' . $option, $option, $value, $old_value );
+ do_action( "update_site_option_{$option}", $option, $value, $old_value, $network_id );
/**
* Fires after the value of a network option has been successfully updated.
*
* @since 3.0.0
+ * @since 4.7.0 The `$network_id` parameter was added.
*
- * @param string $option Name of the network option.
- * @param mixed $value Current value of the network option.
- * @param mixed $old_value Old value of the network option.
+ * @param string $option Name of the network option.
+ * @param mixed $value Current value of the network option.
+ * @param mixed $old_value Old value of the network option.
+ * @param int $network_id ID of the network.
*/
- do_action( 'update_site_option', $option, $value, $old_value );
+ do_action( 'update_site_option', $option, $value, $old_value, $network_id );
return true;
}
*
* @param string $transient Transient name.
*/
- do_action( 'delete_site_transient_' . $transient, $transient );
+ do_action( "delete_site_transient_{$transient}", $transient );
if ( wp_using_ext_object_cache() ) {
$result = wp_cache_delete( $transient, 'site-transient' );
* of the transient, and return the returned value.
* @param string $transient Transient name.
*/
- $pre = apply_filters( 'pre_site_transient_' . $transient, false, $transient );
+ $pre = apply_filters( "pre_site_transient_{$transient}", false, $transient );
if ( false !== $pre )
return $pre;
* @param mixed $value Value of site transient.
* @param string $transient Transient name.
*/
- return apply_filters( 'site_transient_' . $transient, $value, $transient );
+ return apply_filters( "site_transient_{$transient}", $value, $transient );
}
/**
* @param mixed $value New value of site transient.
* @param string $transient Transient name.
*/
- $value = apply_filters( 'pre_set_site_transient_' . $transient, $value, $transient );
+ $value = apply_filters( "pre_set_site_transient_{$transient}", $value, $transient );
$expiration = (int) $expiration;
* @param mixed $value New value of site transient.
* @param string $transient Transient name.
*/
- $expiration = apply_filters( 'expiration_of_site_transient_' . $transient, $expiration, $value, $transient );
+ $expiration = apply_filters( "expiration_of_site_transient_{$transient}", $expiration, $value, $transient );
if ( wp_using_ext_object_cache() ) {
$result = wp_cache_set( $transient, $value, 'site-transient', $expiration );
* @param int $expiration Time until expiration in seconds.
* @param string $transient Transient name.
*/
- do_action( 'set_site_transient_' . $transient, $value, $expiration, $transient );
+ do_action( "set_site_transient_{$transient}", $value, $expiration, $transient );
/**
* Fires after the value for a site transient has been set.
}
return $result;
}
+
+/**
+ * Register default settings available in WordPress.
+ *
+ * The settings registered here are primarily useful for the REST API, so this
+ * does not encompass all settings available in WordPress.
+ *
+ * @since 4.7.0
+ */
+function register_initial_settings() {
+ register_setting( 'general', 'blogname', array(
+ 'show_in_rest' => array(
+ 'name' => 'title',
+ ),
+ 'type' => 'string',
+ 'description' => __( 'Site title.' ),
+ ) );
+
+ register_setting( 'general', 'blogdescription', array(
+ 'show_in_rest' => array(
+ 'name' => 'description',
+ ),
+ 'type' => 'string',
+ 'description' => __( 'Site tagline.' ),
+ ) );
+
+ if ( ! is_multisite() ) {
+ register_setting( 'general', 'siteurl', array(
+ 'show_in_rest' => array(
+ 'name' => 'url',
+ 'schema' => array(
+ 'format' => 'uri',
+ ),
+ ),
+ 'type' => 'string',
+ 'description' => __( 'Site URL.' ),
+ ) );
+ }
+
+ if ( ! is_multisite() ) {
+ register_setting( 'general', 'admin_email', array(
+ 'show_in_rest' => array(
+ 'name' => 'email',
+ 'schema' => array(
+ 'format' => 'email',
+ ),
+ ),
+ 'type' => 'string',
+ 'description' => __( 'This address is used for admin purposes, like new user notification.' ),
+ ) );
+ }
+
+ register_setting( 'general', 'timezone_string', array(
+ 'show_in_rest' => array(
+ 'name' => 'timezone',
+ ),
+ 'type' => 'string',
+ 'description' => __( 'A city in the same timezone as you.' ),
+ ) );
+
+ register_setting( 'general', 'date_format', array(
+ 'show_in_rest' => true,
+ 'type' => 'string',
+ 'description' => __( 'A date format for all date strings.' ),
+ ) );
+
+ register_setting( 'general', 'time_format', array(
+ 'show_in_rest' => true,
+ 'type' => 'string',
+ 'description' => __( 'A time format for all time strings.' ),
+ ) );
+
+ register_setting( 'general', 'start_of_week', array(
+ 'show_in_rest' => true,
+ 'type' => 'integer',
+ 'description' => __( 'A day number of the week that the week should start on.' ),
+ ) );
+
+ register_setting( 'general', 'WPLANG', array(
+ 'show_in_rest' => array(
+ 'name' => 'language',
+ ),
+ 'type' => 'string',
+ 'description' => __( 'WordPress locale code.' ),
+ 'default' => 'en_US',
+ ) );
+
+ register_setting( 'writing', 'use_smilies', array(
+ 'show_in_rest' => true,
+ 'type' => 'boolean',
+ 'description' => __( 'Convert emoticons like :-) and :-P to graphics on display.' ),
+ 'default' => true,
+ ) );
+
+ register_setting( 'writing', 'default_category', array(
+ 'show_in_rest' => true,
+ 'type' => 'integer',
+ 'description' => __( 'Default post category.' ),
+ ) );
+
+ register_setting( 'writing', 'default_post_format', array(
+ 'show_in_rest' => true,
+ 'type' => 'string',
+ 'description' => __( 'Default post format.' ),
+ ) );
+
+ register_setting( 'reading', 'posts_per_page', array(
+ 'show_in_rest' => true,
+ 'type' => 'integer',
+ 'description' => __( 'Blog pages show at most.' ),
+ 'default' => 10,
+ ) );
+
+ register_setting( 'discussion', 'default_ping_status', array(
+ 'show_in_rest' => array(
+ 'schema' => array(
+ 'enum' => array( 'open', 'closed' ),
+ ),
+ ),
+ 'type' => 'string',
+ 'description' => __( 'Allow link notifications from other blogs (pingbacks and trackbacks) on new articles.' ),
+ ) );
+
+ register_setting( 'discussion', 'default_comment_status', array(
+ 'show_in_rest' => array(
+ 'schema' => array(
+ 'enum' => array( 'open', 'closed' ),
+ ),
+ ),
+ 'type' => 'string',
+ 'description' => __( 'Allow people to post comments on new articles.' ),
+ ) );
+
+}
+
+/**
+ * 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.
+ * @type mixed $default Default value when calling `get_option()`.
+ * }
+ */
+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'] );
+ }
+ if ( array_key_exists( 'default', $args ) ) {
+ add_filter( "default_option_{$option_name}", 'filter_default_option', 10, 3 );
+ }
+
+ $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;
+}
+
+/**
+ * Filter the default value for the option.
+ *
+ * For settings which register a default setting in `register_setting()`, this
+ * function is added as a filter to `default_option_{$option}`.
+ *
+ * @since 4.7.0
+ *
+ * @param mixed $default Existing default value to return.
+ * @param string $option Option name.
+ * @param bool $passed_default Was `get_option()` passed a default value?
+ * @return mixed Filtered default value.
+ */
+function filter_default_option( $default, $option, $passed_default ) {
+ if ( $passed_default ) {
+ return $default;
+ }
+
+ $registered = get_registered_settings();
+ if ( empty( $registered[ $option ] ) ) {
+ return $default;
+ }
+
+ return $registered[ $option ]['default'];
+}