## Функция ADD_OPTION() │ WP 1.0.0
Функция add_option()
добавляет новую опцию. Если такая опция уже существует, функция ничего не делает.
### Хранение значений и сериализация
Не нужно вручную сериализовать значения. Если значение требует сериализации, это сделает функция автоматически перед вставкой в базу данных.
Вы можете создать опцию без значения и обновить её позже.
### Хуки функции
- default_option_(option)
- add_option
- add_option_(option)
- added_option
### Возврат значения
Функция возвращает true
, если опция была успешно добавлена, и false
в противном случае.
### Применение
Функция вызывается следующим образом:
```php
add_option( $option, $value, $deprecated, $autoload );
-
$option (string) (обязательный)
Имя опции, которую нужно добавить. Ожидается, что оно не будет экранировано SQL.Рекомендуется использовать нижнее подчеркивание для разделения слов и избегать использования заглавных букв.
-
$value (mixed)
Значение опции. Должно быть сериализуемым, если не является скалярным. Ожидается, что оно не будет экранировано SQL.
По умолчанию:''
-
$deprecated (string)
Устаревший параметр с версии 2.3.
По умолчанию:''
-
$autoload (string/true/false)
Определяет, нужно ли загружать опцию при запуске WordPress. Принимает значение 'no' для отключения по старым причинам.Автозагрузка реализована с помощью функции
wp_load_alloptions()
, которая добавляет опцию в массив всех автозагружаемых опций, а затем помещает опцию из массива в кэш во время генерации страницы.
По умолчанию:yes
Примеры использования
Давайте добавим опцию my_option
со значением 255. Автозагрузка для этой опции будет включена.
add_option( 'my_option', '255' );
Примечания
- Глобальная переменная:
$wpdb
— это объект абстракции базы данных WordPress.
Изменения
- С версии 1.0.0: Функция введена.
- С версии 6.6.0: Значение по умолчанию для параметра
$autoload
изменено наnull
. - С версии 6.7.0: Значения автозагрузки 'yes' и 'no' признаны устаревшими.
Код функции ADD_OPTION() (WP 6.7.2)
function add_option( $option, $value = '', $deprecated = '', $autoload = null ) {
global $wpdb;
if ( ! empty( $deprecated ) ) {
_deprecated_argument( __FUNCTION__, '2.3.0' );
}
if ( is_scalar( $option ) ) {
$option = trim( $option );
}
if ( empty( $option ) ) {
return false;
}
$deprecated_keys = array(
'blacklist_keys' => 'disallowed_keys',
'comment_whitelist' => 'comment_previously_approved',
);
if ( isset( $deprecated_keys[ $option ] ) && ! wp_installing() ) {
_deprecated_argument(
__FUNCTION__,
'5.5.0',
sprintf(
__( 'Ключ опции "%1$s" был переименован в "%2$s".' ),
$option,
$deprecated_keys[ $option ]
)
);
return add_option( $deprecated_keys[ $option ], $value, $deprecated, $autoload );
}
wp_protect_special_option( $option );
if ( is_object( $value ) ) {
$value = clone $value;
}
$value = sanitize_option( $option, $value );
$notoptions = wp_cache_get( 'notoptions', 'options' );
if ( ! is_array( $notoptions ) || ! isset( $notoptions[ $option ] ) ) {
if ( apply_filters( "default_option_{$option}", false, $option, false ) !== get_option( $option ) ) {
return false;
}
}
$serialized_value = maybe_serialize( $value );
$autoload = wp_determine_option_autoload_value( $option, $value, $serialized_value, $autoload );
do_action( 'add_option', $option, $value );
$result = $wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->options
(option_name
, option_value
, autoload
) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE option_name
= VALUES(option_name
), option_value
= VALUES(option_value
), autoload
= VALUES(autoload
)", $option, $serialized_value, $autoload ) );
if ( ! $result ) {
return false;
}
if ( ! wp_installing() ) {
if ( in_array( $autoload, wp_autoload_values_to_autoload(), true ) ) {
$alloptions = wp_load_alloptions( true );
$alloptions[ $option ] = $serialized_value;
wp_cache_set( 'alloptions', $alloptions, 'options' );
} else {
wp_cache_set( $option, $serialized_value, 'options' );
}
}
$notoptions = wp_cache_get( 'notoptions', 'options' );
if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
unset( $notoptions[ $option ] );
wp_cache_set( 'notoptions', $notoptions, 'options' );
}
do_action( "add_option_{$option}", $option, $value );
do_action( 'added_option', $option, $value );
return true;
}
Связанные функции
add_network_option()
delete_option()
get_network_option()
get_option()
get_site_option()
register_setting()
update_option()
update_site_option()