unregister_setting() │ WP 2.7.0
Позволяет отменить зарегистрированные ранее настройки (опции). Чаще всего используется с функцией деактивации плагина: register_deactivation_hook().
unregister_setting() - одна из функций API настроек.
Возвращает
null
. Ничего не возвращает.
Использование
unregister_setting( $option_group, $option_name, $deprecated );
- $option_group(строка) (обязательный)
- Название группы к которой принадлежит опция. Указывается при регистрации в параметре $option_group в
register_setting( $option_group, $option_name, $sanitize_callback ).
- $option_name(строка) (обязательный)
- Название опции, которую нужно отменить.
- $deprecated(строка)
Запрещен с версии 4.7. Теперь используется callback из функции register_setting().
Название функции, которая обрабатывает значение опции перед сохранением.
По умолчанию: ''
Примеры
#1 Предположим мы зарегистрировали опцию и теперь нам нужно её отменить:
// Регистрация новой опции
function eg_settings_api_init() {
// Добавляем блок опций на базовую страницу опций "Чтение"
add_settings_section(
'eg_setting_section', // секция
'Заголовок для секции настроек',
'eg_setting_section_callback_function',
'reading' // страница
);
// Добавляем поля опций. Указываем название, описание,
// функцию выводящую html код поля опции.
add_settings_field(
'eg_setting_name',
'Описание поля опции',
'eg_setting_callback_function', // можно указать ''
'reading', // страница
'eg_setting_section' // секция
);
// Регистрируем опции, чтобы они сохранялись при отправке
register_setting( 'reading', 'eg_setting_name' );
}
add_action( 'admin_init', 'eg_settings_api_init' );
...
// Теперь, где-то дальше по скрипту нам понадобилось отменить опцию "eg_setting_name". Отменяем:
unregister_setting( 'reading', "eg_setting_name" );
Заметки
- Global. Массив. $new_allowed_options
- Global. Массив. $wp_registered_settings
Список изменений
С версии 2.7.0 |
Введена. |
С версии 4.7.0 |
$sanitize_callback was deprecated. The callback from register_setting() now used instead. |
С версии 5.5.0 |
$new_whitelist_options was renamed to $new_allowed_options. Please consider writing more inclusive code. |
Код unregister_setting() unregister setting
WP 6.4.1
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 ] );
}
}
Cвязанные функции