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 не specified.
if ( ! $network_id ) {
$network_id = get_current_network_id();
}
wp_protect_special_option($option);
/**
* Filters значення конкретних мережевих опцій перед тим, як це added.
*
* The dynamic portion of 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');
// Ця 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 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;
}