add_site_option()向wp_option表添加选项/值对(多站点)

目录

描述

Essentially the same as add_option() but works network wide when using WP Multisite.

The only major difference is that on multisite site-wide options will not autoload and on a single site the option will autoload. Unlike when using add_option() on a single site, the feature cannot be overridden.

add_site_option() 描述

用法

<?php add_site_option$option$value ); ?>

add_site_option() 用法

参数

$option

(string) (必填) The name of the option to add.

默认值: None

$value

(mixed) (必填) The value for the option.

默认值: None

add_site_option() 参数

返回值

(boolean

Whether the option was added.

add_site_option() 返回值

历史

  • 3.3.0 - The behavior of the function was changed so that existing options would not be updated.
  • 添加于 版本 2.8.0

add_site_option() 历史

源文件

add_site_option() 函数的代码位于 wp-includes/option.php.

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
/**
 * Add a new site option.
 *
 * Existing options will not be updated. Note that prior to 3.3 this wasn't the case.
 *
 * @since 2.8.0
 *
 * @see add_option()
 *
 * @global wpdb $wpdb
 *
 * @param string $option Name of option to add. Expected to not be SQL-escaped.
 * @param mixed  $value  Optional. 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_site_option( $option, $value ) {
	global $wpdb;

	wp_protect_special_option( $option );

	/**
	 * Filter the value of a specific site 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
	 *
	 * @param mixed $value Value of site option.
	 */
	$value = apply_filters( 'pre_add_site_option_' . $option, $value );

	$notoptions_key = "{$wpdb->siteid}:notoptions";

	if ( !is_multisite() ) {
		$result = add_option( $option, $value );
	} else {
		$cache_key = "{$wpdb->siteid}:$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_site_option( $option ) )
				return false;

		$value = sanitize_option( $option, $value );

		$serialized_value = maybe_serialize( $value );
		$result = $wpdb->insert( $wpdb->sitemeta, array('site_id' => $wpdb->siteid, '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 site 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 site option.
		 * @param mixed  $value  Value of site option.
		 */
		do_action( "add_site_option_{$option}", $option, $value );

		/**
		 * Fires after a site option has been successfully added.
		 *
		 * @since 3.0.0
		 *
		 * @param string $option Name of site option.
		 * @param mixed  $value  Value of site option.
		 */
		do_action( "add_site_option", $option, $value );

		return true;
	}
	return false;
}

add_site_option() 源文件

相关