Добавление сетевой опции в WordPress: функция add_network_option()

# Функция ADD_NETWORK_OPTION() │ WP 4.4.0

Функция add_network_option() добавляет новую сетевую опцию в WordPress. Существующие опции при этом не обновляются.

## Хуки функции

- pre_add_site_option_(option)
- add_site_option_(option)
- add_site_option

## Возвращаемые значения

- true — если опция была добавлена.
- false — если не удалось добавить опцию.

## Использование

```php
add_network_option( $network_id, $option, $value );
  • $network_id (int) (обязательный) — ID сети. Может быть null, чтобы использовать текущий ID сети.
  • $option (string) (обязательный) — имя добавляемой опции. Необходимо избегать SQL-экранирования.
  • $value (mixed) (обязательный) — значение опции, может быть любым. Также избегайте SQL-экранирования.

Примеры

Пример 1: Добавление пользовательской сетевой опции для сайта с ID 2

add_network_option( 2, 'my_option', 'значение моей опции' );

Добавьте свой собственный пример

Примечания

  • Посмотрите: add_option()
  • Глобальная переменная: $wpdb — объект абстракции базы данных WordPress.

Изменения

  • С версии 4.4.0 — введена функция.

Код функции ADD_NETWORK_OPTION() в WP 6.7.2

Файл: wp-includes/option.php

function add_network_option( $network_id, $option, $value ) {
    global $wpdb;

    if ( $network_id && ! is_numeric( $network_id ) ) {
        return false; // Если ID сети не числовой, вернём false.
    }

    $network_id = (int) $network_id; // Приводим к целому числу.

    // Если ID сети не указан, используем текущий ID сети.
    if ( ! $network_id ) {
        $network_id = get_current_network_id();
    }

    wp_protect_special_option( $option ); // Защита специальной опции.

    // Фильтруем значение определенной сетевой опции перед добавлением.
    $value = apply_filters( "pre_add_site_option_{$option}", $value, $option, $network_id );

    $notoptions_key = "$network_id:notoptions"; // Ключ для кэша.

    if ( ! is_multisite() ) {
        $result = add_option( $option, $value, '', false ); // Добавляем опцию.
    } else {
        $cache_key = "$network_id:$option"; // Ключ для кэша.

        // Проверяем, не существует ли опция в кешах.
        $notoptions = wp_cache_get( $notoptions_key, 'site-options' );

        if ( ! is_array( $notoptions ) || ! isset( $notoptions[ $option ] ) ) {
            if ( false !== get_network_option( $network_id, $option, false ) ) {
                return false; // Если опция уже существует, возвращаем false.
            }
        }

        $value = sanitize_option( $option, $value ); // Санитизация значения опции.
        $serialized_value = maybe_serialize( $value ); // Сериализация значения.

        $result = $wpdb->insert(
            $wpdb->sitemeta,
            array(
                'site_id'    => $network_id,
                'meta_key'   => $option,
                'meta_value' => $serialized_value,
            )
        );

        if ( ! $result ) {
            return false; // Если не удалось добавить, возвращаем false.
        }

        wp_cache_set( $cache_key, $value, 'site-options' ); // Сохраняем значение в кэш.

        // Опция теперь существует.
        $notoptions = wp_cache_get( $notoptions_key, 'site-options' ); // Обновляем кеш.

        if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
            unset( $notoptions[ $option ] ); // Удаляем опцию из кеша.
            wp_cache_set( $notoptions_key, $notoptions, 'site-options' ); // Обновляем кеш.
        }
    }

    if ( $result ) {
        // Действие после успешного добавления сетевой опции.
        do_action( "add_site_option_{$option}", $option, $value, $network_id );
        do_action( 'add_site_option', $option, $value, $network_id );

        return true; // Успешно добавлено, возвращаем true.
    }

    return false; // В случае неудачи.
}

Связанные функции

  • add_option()
  • delete_option()
  • get_network_option()
  • get_option()
  • get_site_option()
  • register_setting()
  • update_option()
  • update_site_option()

Leave a Reply

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