ADD_OPTION() в WordPress: функция для добавления новой опции.

## Функция 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()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *