WordPress Version: 6.4
/**
* Unregisters a setting.
*
* @since 2.7.0
* @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) {
_deprecated_argument(__FUNCTION__, '3.0.0', sprintf(
/* translators: %s: misc */
__('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(
/* translators: %s: privacy */
__('The "%s" options group has been removed. Use another settings group.'),
'privacy'
));
$option_group = 'reading';
}
$pos = false;
if (isset($new_allowed_options[$option_group])) {
$pos = array_search($option_name, (array) $new_allowed_options[$option_group], true);
}
if (false !== $pos) {
unset($new_allowed_options[$option_group][$pos]);
}
if ('' !== $deprecated) {
_deprecated_argument(__FUNCTION__, '4.7.0', sprintf(
/* 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.
*
* @since 5.5.0
*
* @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]);
}
}