add_network_option

The timeline below displays how wordpress function add_network_option has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.3

/**
 * Adds a new network option.
 *
 * Existing options will not be updated.
 *
 * @since 4.4.0
 *
 * @see add_option()
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $network_id ID of the network. Can be null to default to the current network ID.
 * @param string $option     Name of the option to add. Expected to not be SQL-escaped.
 * @param mixed  $value      Option value, can be anything. Expected to not be SQL-escaped.
 * @return bool True if the option was added, false otherwise.
 */
function add_network_option($network_id, $option, $value)
{
    global $wpdb;
    if ($network_id && !is_numeric($network_id)) {
        return false;
    }
    $network_id = (int) $network_id;
    // Fallback to the current network if a network ID is not specified.
    if (!$network_id) {
        $network_id = get_current_network_id();
    }
    wp_protect_special_option($option);
    /**
     * Filters the value of a specific network option before it is added.
     *
     * The dynamic portion of the hook name, `$option`, refers to the option name.
     *
     * @since 2.9.0 As 'pre_add_site_option_' . $key
     * @since 3.0.0
     * @since 4.4.0 The `$option` parameter was added.
     * @since 4.7.0 The `$network_id` parameter was added.
     *
     * @param mixed  $value      Value of network option.
     * @param string $option     Option name.
     * @param int    $network_id ID of the network.
     */
    $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, '', 'no');
    } else {
        $cache_key = "{$network_id}:{$option}";
        /*
         * Make sure the option doesn't already exist.
         * We can check the 'notoptions' cache before we ask for a DB query.
         */
        $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;
            }
        }
        $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;
        }
        wp_cache_set($cache_key, $value, 'site-options');
        // This option exists now.
        $notoptions = wp_cache_get($notoptions_key, 'site-options');
        // Yes, again... we need it to be fresh.
        if (is_array($notoptions) && isset($notoptions[$option])) {
            unset($notoptions[$option]);
            wp_cache_set($notoptions_key, $notoptions, 'site-options');
        }
    }
    if ($result) {
        /**
         * Fires after a specific network option has been successfully added.
         *
         * The dynamic portion of the hook name, `$option`, refers to the option name.
         *
         * @since 2.9.0 As "add_site_option_{$key}"
         * @since 3.0.0
         * @since 4.7.0 The `$network_id` parameter was added.
         *
         * @param string $option     Name of the network option.
         * @param mixed  $value      Value of the network option.
         * @param int    $network_id ID of the network.
         */
        do_action("add_site_option_{$option}", $option, $value, $network_id);
        /**
         * Fires after a network option has been successfully added.
         *
         * @since 3.0.0
         * @since 4.7.0 The `$network_id` parameter was added.
         *
         * @param string $option     Name of the network option.
         * @param mixed  $value      Value of the network option.
         * @param int    $network_id ID of the network.
         */
        do_action('add_site_option', $option, $value, $network_id);
        return true;
    }
    return false;
}

WordPress Version: 5.5

/**
 * Adds a new network option.
 *
 * Existing options will not be updated.
 *
 * @since 4.4.0
 *
 * @see add_option()
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $network_id ID of the network. Can be null to default to the current network ID.
 * @param string $option     Name of the option to add. Expected to not be SQL-escaped.
 * @param mixed  $value      Option value, can be anything. Expected to not be SQL-escaped.
 * @return bool True if the option was added, false otherwise.
 */
function add_network_option($network_id, $option, $value)
{
    global $wpdb;
    if ($network_id && !is_numeric($network_id)) {
        return false;
    }
    $network_id = (int) $network_id;
    // Fallback to the current network if a network ID is not specified.
    if (!$network_id) {
        $network_id = get_current_network_id();
    }
    wp_protect_special_option($option);
    /**
     * Filters the value of a specific network option before it is added.
     *
     * The dynamic portion of the hook name, `$option`, refers to the option name.
     *
     * @since 2.9.0 As 'pre_add_site_option_' . $key
     * @since 3.0.0
     * @since 4.4.0 The `$option` parameter was added.
     * @since 4.7.0 The `$network_id` parameter was added.
     *
     * @param mixed  $value      Value of network option.
     * @param string $option     Option name.
     * @param int    $network_id ID of the network.
     */
    $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, '', 'no');
    } else {
        $cache_key = "{$network_id}:{$option}";
        // Make sure the option doesn't already exist.
        // We can check the 'notoptions' cache before we ask for a DB query.
        $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;
            }
        }
        $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;
        }
        wp_cache_set($cache_key, $value, 'site-options');
        // This option exists now.
        $notoptions = wp_cache_get($notoptions_key, 'site-options');
        // Yes, again... we need it to be fresh.
        if (is_array($notoptions) && isset($notoptions[$option])) {
            unset($notoptions[$option]);
            wp_cache_set($notoptions_key, $notoptions, 'site-options');
        }
    }
    if ($result) {
        /**
         * Fires after a specific network option has been successfully added.
         *
         * The dynamic portion of the hook name, `$option`, refers to the option name.
         *
         * @since 2.9.0 As "add_site_option_{$key}"
         * @since 3.0.0
         * @since 4.7.0 The `$network_id` parameter was added.
         *
         * @param string $option     Name of the network option.
         * @param mixed  $value      Value of the network option.
         * @param int    $network_id ID of the network.
         */
        do_action("add_site_option_{$option}", $option, $value, $network_id);
        /**
         * Fires after a network option has been successfully added.
         *
         * @since 3.0.0
         * @since 4.7.0 The `$network_id` parameter was added.
         *
         * @param string $option     Name of the network option.
         * @param mixed  $value      Value of the network option.
         * @param int    $network_id ID of the network.
         */
        do_action('add_site_option', $option, $value, $network_id);
        return true;
    }
    return false;
}

WordPress Version: 5.4

/**
 * Adds a new network option.
 *
 * Existing options will not be updated.
 *
 * @since 4.4.0
 *
 * @see add_option()
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $network_id ID of the network. Can be null to default to the current network ID.
 * @param string $option     Name of option to add. Expected to not be SQL-escaped.
 * @param mixed  $value      Option value, can be anything. Expected to not be SQL-escaped.
 * @return bool False if option was not added and true if option was added.
 */
function add_network_option($network_id, $option, $value)
{
    global $wpdb;
    if ($network_id && !is_numeric($network_id)) {
        return false;
    }
    $network_id = (int) $network_id;
    // Fallback to the current network if a network ID is not specified.
    if (!$network_id) {
        $network_id = get_current_network_id();
    }
    wp_protect_special_option($option);
    /**
     * Filters the value of a specific network option before it is added.
     *
     * The dynamic portion of the hook name, `$option`, refers to the option name.
     *
     * @since 2.9.0 As 'pre_add_site_option_' . $key
     * @since 3.0.0
     * @since 4.4.0 The `$option` parameter was added.
     * @since 4.7.0 The `$network_id` parameter was added.
     *
     * @param mixed  $value      Value of network option.
     * @param string $option     Option name.
     * @param int    $network_id ID of the network.
     */
    $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, '', 'no');
    } else {
        $cache_key = "{$network_id}:{$option}";
        // Make sure the option doesn't already exist.
        // We can check the 'notoptions' cache before we ask for a DB query.
        $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;
            }
        }
        $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;
        }
        wp_cache_set($cache_key, $value, 'site-options');
        // This option exists now.
        $notoptions = wp_cache_get($notoptions_key, 'site-options');
        // Yes, again... we need it to be fresh.
        if (is_array($notoptions) && isset($notoptions[$option])) {
            unset($notoptions[$option]);
            wp_cache_set($notoptions_key, $notoptions, 'site-options');
        }
    }
    if ($result) {
        /**
         * Fires after a specific network option has been successfully added.
         *
         * The dynamic portion of the hook name, `$option`, refers to the option name.
         *
         * @since 2.9.0 As "add_site_option_{$key}"
         * @since 3.0.0
         * @since 4.7.0 The `$network_id` parameter was added.
         *
         * @param string $option     Name of the network option.
         * @param mixed  $value      Value of the network option.
         * @param int    $network_id ID of the network.
         */
        do_action("add_site_option_{$option}", $option, $value, $network_id);
        /**
         * Fires after a network option has been successfully added.
         *
         * @since 3.0.0
         * @since 4.7.0 The `$network_id` parameter was added.
         *
         * @param string $option     Name of the network option.
         * @param mixed  $value      Value of the network option.
         * @param int    $network_id ID of the network.
         */
        do_action('add_site_option', $option, $value, $network_id);
        return true;
    }
    return false;
}

WordPress Version: 5.1

/**
 * Add a new network option.
 *
 * Existing options will not be updated.
 *
 * @since 4.4.0
 *
 * @see add_option()
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $network_id ID of the network. Can be null to default to the current network ID.
 * @param string $option     Name of option to add. Expected to not be SQL-escaped.
 * @param mixed  $value      Option value, can be anything. Expected to not be SQL-escaped.
 * @return bool False if option was not added and true if option was added.
 */
function add_network_option($network_id, $option, $value)
{
    global $wpdb;
    if ($network_id && !is_numeric($network_id)) {
        return false;
    }
    $network_id = (int) $network_id;
    // Fallback to the current network if a network ID is not specified.
    if (!$network_id) {
        $network_id = get_current_network_id();
    }
    wp_protect_special_option($option);
    /**
     * Filters the value of a specific network option before it is added.
     *
     * The dynamic portion of the hook name, `$option`, refers to the option name.
     *
     * @since 2.9.0 As 'pre_add_site_option_' . $key
     * @since 3.0.0
     * @since 4.4.0 The `$option` parameter was added.
     * @since 4.7.0 The `$network_id` parameter was added.
     *
     * @param mixed  $value      Value of network option.
     * @param string $option     Option name.
     * @param int    $network_id ID of the network.
     */
    $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, '', 'no');
    } else {
        $cache_key = "{$network_id}:{$option}";
        // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
        $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;
            }
        }
        $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;
        }
        wp_cache_set($cache_key, $value, 'site-options');
        // This option exists now
        $notoptions = wp_cache_get($notoptions_key, 'site-options');
        // yes, again... we need it to be fresh
        if (is_array($notoptions) && isset($notoptions[$option])) {
            unset($notoptions[$option]);
            wp_cache_set($notoptions_key, $notoptions, 'site-options');
        }
    }
    if ($result) {
        /**
         * Fires after a specific network option has been successfully added.
         *
         * The dynamic portion of the hook name, `$option`, refers to the option name.
         *
         * @since 2.9.0 As "add_site_option_{$key}"
         * @since 3.0.0
         * @since 4.7.0 The `$network_id` parameter was added.
         *
         * @param string $option     Name of the network option.
         * @param mixed  $value      Value of the network option.
         * @param int    $network_id ID of the network.
         */
        do_action("add_site_option_{$option}", $option, $value, $network_id);
        /**
         * Fires after a network option has been successfully added.
         *
         * @since 3.0.0
         * @since 4.7.0 The `$network_id` parameter was added.
         *
         * @param string $option     Name of the network option.
         * @param mixed  $value      Value of the network option.
         * @param int    $network_id ID of the network.
         */
        do_action('add_site_option', $option, $value, $network_id);
        return true;
    }
    return false;
}

WordPress Version: 4.7

/**
 * Add a new network option.
 *
 * Existing options will not be updated.
 *
 * @since 4.4.0
 *
 * @see add_option()
 *
 * @global wpdb $wpdb
 *
 * @param int    $network_id ID of the network. Can be null to default to the current network ID.
 * @param string $option     Name of option to add. Expected to not be SQL-escaped.
 * @param mixed  $value      Option value, can be anything. Expected to not be SQL-escaped.
 * @return bool False if option was not added and true if option was added.
 */
function add_network_option($network_id, $option, $value)
{
    global $wpdb;
    if ($network_id && !is_numeric($network_id)) {
        return false;
    }
    $network_id = (int) $network_id;
    // Fallback to the current network if a network ID is not specified.
    if (!$network_id) {
        $network_id = get_current_network_id();
    }
    wp_protect_special_option($option);
    /**
     * Filters the value of a specific network option before it is added.
     *
     * The dynamic portion of the hook name, `$option`, refers to the option name.
     *
     * @since 2.9.0 As 'pre_add_site_option_' . $key
     * @since 3.0.0
     * @since 4.4.0 The `$option` parameter was added.
     * @since 4.7.0 The `$network_id` parameter was added.
     *
     * @param mixed  $value      Value of network option.
     * @param string $option     Option name.
     * @param int    $network_id ID of the network.
     */
    $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, '', 'no');
    } else {
        $cache_key = "{$network_id}:{$option}";
        // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
        $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;
            }
        }
        $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;
        }
        wp_cache_set($cache_key, $value, 'site-options');
        // This option exists now
        $notoptions = wp_cache_get($notoptions_key, 'site-options');
        // yes, again... we need it to be fresh
        if (is_array($notoptions) && isset($notoptions[$option])) {
            unset($notoptions[$option]);
            wp_cache_set($notoptions_key, $notoptions, 'site-options');
        }
    }
    if ($result) {
        /**
         * Fires after a specific network option has been successfully added.
         *
         * The dynamic portion of the hook name, `$option`, refers to the option name.
         *
         * @since 2.9.0 As "add_site_option_{$key}"
         * @since 3.0.0
         * @since 4.7.0 The `$network_id` parameter was added.
         *
         * @param string $option     Name of the network option.
         * @param mixed  $value      Value of the network option.
         * @param int    $network_id ID of the network.
         */
        do_action("add_site_option_{$option}", $option, $value, $network_id);
        /**
         * Fires after a network option has been successfully added.
         *
         * @since 3.0.0
         * @since 4.7.0 The `$network_id` parameter was added.
         *
         * @param string $option     Name of the network option.
         * @param mixed  $value      Value of the network option.
         * @param int    $network_id ID of the network.
         */
        do_action('add_site_option', $option, $value, $network_id);
        return true;
    }
    return false;
}

WordPress Version: 4.6

/**
 * Add a new network option.
 *
 * Existing options will not be updated.
 *
 * @since 4.4.0
 *
 * @see add_option()
 *
 * @global wpdb   $wpdb
 * @global object $current_site
 *
 * @param int    $network_id ID of the network. Can be null to default to the current network ID.
 * @param string $option     Name of option to add. Expected to not be SQL-escaped.
 * @param mixed  $value      Option value, can be anything. Expected to not be SQL-escaped.
 * @return bool False if option was not added and true if option was added.
 */
function add_network_option($network_id, $option, $value)
{
    global $wpdb, $current_site;
    if ($network_id && !is_numeric($network_id)) {
        return false;
    }
    $network_id = (int) $network_id;
    // Fallback to the current network if a network ID is not specified.
    if (!$network_id && is_multisite()) {
        $network_id = $current_site->id;
    }
    wp_protect_special_option($option);
    /**
     * Filters the value of a specific network option before it is added.
     *
     * The dynamic portion of the hook name, `$option`, refers to the option name.
     *
     * @since 2.9.0 As 'pre_add_site_option_' . $key
     * @since 3.0.0
     * @since 4.4.0 The `$option` parameter was added
     *
     * @param mixed  $value  Value of network option.
     * @param string $option Option name.
     */
    $value = apply_filters('pre_add_site_option_' . $option, $value, $option);
    $notoptions_key = "{$network_id}:notoptions";
    if (!is_multisite()) {
        $result = add_option($option, $value, '', 'no');
    } else {
        $cache_key = "{$network_id}:{$option}";
        // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
        $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;
            }
        }
        $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;
        }
        wp_cache_set($cache_key, $value, 'site-options');
        // This option exists now
        $notoptions = wp_cache_get($notoptions_key, 'site-options');
        // yes, again... we need it to be fresh
        if (is_array($notoptions) && isset($notoptions[$option])) {
            unset($notoptions[$option]);
            wp_cache_set($notoptions_key, $notoptions, 'site-options');
        }
    }
    if ($result) {
        /**
         * Fires after a specific network option has been successfully added.
         *
         * The dynamic portion of the hook name, `$option`, refers to the option name.
         *
         * @since 2.9.0 As "add_site_option_{$key}"
         * @since 3.0.0
         *
         * @param string $option Name of the network option.
         * @param mixed  $value  Value of the network option.
         */
        do_action('add_site_option_' . $option, $option, $value);
        /**
         * Fires after a network option has been successfully added.
         *
         * @since 3.0.0
         *
         * @param string $option Name of the network option.
         * @param mixed  $value  Value of the network option.
         */
        do_action('add_site_option', $option, $value);
        return true;
    }
    return false;
}

WordPress Version: 4.4

/**
 * Add a new network option.
 *
 * Existing options will not be updated.
 *
 * @since 4.4.0
 *
 * @see add_option()
 *
 * @global wpdb   $wpdb
 * @global object $current_site
 *
 * @param int    $network_id ID of the network. Can be null to default to the current network ID.
 * @param string $option     Name of option to add. Expected to not be SQL-escaped.
 * @param mixed  $value      Option value, can be anything. Expected to not be SQL-escaped.
 * @return bool False if option was not added and true if option was added.
 */
function add_network_option($network_id, $option, $value)
{
    global $wpdb, $current_site;
    if ($network_id && !is_numeric($network_id)) {
        return false;
    }
    $network_id = (int) $network_id;
    // Fallback to the current network if a network ID is not specified.
    if (!$network_id && is_multisite()) {
        $network_id = $current_site->id;
    }
    wp_protect_special_option($option);
    /**
     * Filter the value of a specific network option before it is added.
     *
     * The dynamic portion of the hook name, `$option`, refers to the option name.
     *
     * @since 2.9.0 As 'pre_add_site_option_' . $key
     * @since 3.0.0
     * @since 4.4.0 The `$option` parameter was added
     *
     * @param mixed  $value  Value of network option.
     * @param string $option Option name.
     */
    $value = apply_filters('pre_add_site_option_' . $option, $value, $option);
    $notoptions_key = "{$network_id}:notoptions";
    if (!is_multisite()) {
        $result = add_option($option, $value);
    } else {
        $cache_key = "{$network_id}:{$option}";
        // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
        $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;
            }
        }
        $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;
        }
        wp_cache_set($cache_key, $value, 'site-options');
        // This option exists now
        $notoptions = wp_cache_get($notoptions_key, 'site-options');
        // yes, again... we need it to be fresh
        if (is_array($notoptions) && isset($notoptions[$option])) {
            unset($notoptions[$option]);
            wp_cache_set($notoptions_key, $notoptions, 'site-options');
        }
    }
    if ($result) {
        /**
         * Fires after a specific network option has been successfully added.
         *
         * The dynamic portion of the hook name, `$option`, refers to the option name.
         *
         * @since 2.9.0 As "add_site_option_{$key}"
         * @since 3.0.0
         *
         * @param string $option Name of the network option.
         * @param mixed  $value  Value of the network option.
         */
        do_action('add_site_option_' . $option, $option, $value);
        /**
         * Fires after a network option has been successfully added.
         *
         * @since 3.0.0
         *
         * @param string $option Name of the network option.
         * @param mixed  $value  Value of the network option.
         */
        do_action('add_site_option', $option, $value);
        return true;
    }
    return false;
}