: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* @since 4.7.0 `$sanitize_callback` was deprecated. The callback from `register_setting()` is now used instead.
* @since 5.5.0 `$new_whitelist_options` was renamed to `$new_allowed_options`.
* Please consider writing more inclusive code.
* @global array $new_allowed_options
* @global array $wp_registered_settings
* @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 Optional. Deprecated.
function unregister_setting( $option_group, $option_name, $deprecated = '' ) {
global $new_allowed_options, $wp_registered_settings;
* In 5.5.0, the `$new_whitelist_options` global variable was renamed to `$new_allowed_options`.
* Please consider writing more inclusive code.
$GLOBALS['new_whitelist_options'] = &$new_allowed_options;
if ( 'misc' === $option_group ) {
/* translators: %s: misc */
__( 'The "%s" options group has been removed. Use another settings group.' ),
$option_group = 'general';
if ( 'privacy' === $option_group ) {
/* translators: %s: privacy */
__( 'The "%s" options group has been removed. Use another settings group.' ),
$option_group = 'reading';
if ( isset( $new_allowed_options[ $option_group ] ) ) {
$pos = array_search( $option_name, (array) $new_allowed_options[ $option_group ], true );
unset( $new_allowed_options[ $option_group ][ $pos ] );
if ( '' !== $deprecated ) {
/* translators: 1: $sanitize_callback, 2: register_setting() */
__( '%1$s is deprecated. The callback from %2$s is used instead.' ),
'<code>$sanitize_callback</code>',
'<code>register_setting()</code>'
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'] );
// Remove the default filter if a default was provided during registration.
if ( array_key_exists( 'default', $wp_registered_settings[ $option_name ] ) ) {
remove_filter( "default_option_{$option_name}", 'filter_default_option', 10 );
* Fires immediately before the setting is unregistered and after its filters have been removed.
* @param string $option_group Setting group.
* @param string $option_name Setting name.
do_action( 'unregister_setting', $option_group, $option_name );
unset( $wp_registered_settings[ $option_name ] );
* Retrieves an array of registered settings.
* @global array $wp_registered_settings
* @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 $wp_registered_settings;
* Filters 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}`.
* @param mixed $default_value 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_value, $option, $passed_default ) {
$registered = get_registered_settings();
if ( empty( $registered[ $option ] ) ) {
return $registered[ $option ]['default'];
* Returns the values that trigger autoloading from the options table.
* @return string[] The values that trigger autoloading.
function wp_autoload_values_to_autoload() {
$autoload_values = array( 'yes', 'on', 'auto-on', 'auto' );
* Filters the autoload values that should be considered for autoloading from the options table.
* The filter can only be used to remove autoload values from the default list.
* @param string[] $autoload_values Autoload values used to autoload option.
* Default list contains 'yes', 'on', 'auto-on', and 'auto'.
$filtered_values = apply_filters( 'wp_autoload_values_to_autoload', $autoload_values );
return array_intersect( $filtered_values, $autoload_values );