WordPress函数:update_option 更新配置选项

江河/ 2023年08月20日/ WordPress/ 浏览 1621

函数原型:


update_option( string $option, mixed $value, string|bool $autoload = null ): bool


更新已添加的选项的值。


您不需要序列化值。如果该值需要序列化,则在将其插入数据库之前将对其进行序列化。


请记住,资源不能作为选项进行序列化或添加。


如果该选项不存在,则会创建该选项。


此功能设计用于在有或没有登录用户的情况下工作。在安全性方面,插件开发人员应该在更新任何选项之前检查当前用户的功能。


参数说明:


$option,要更新的选项的名称。应为非SQL转义。


$value,选项值。如果不是标量,则必须是可序列化的。应为非SQL转义。


$autoload,是否在WordPress启动时加载该选项。对于现有选项,如果$value也发生了更改,则只能使用update_option()更新$autoload。

接受'yes'|true可启用,接受'no'|false可禁用。对于不存在的选项,默认值为“yes”。


函数源码:


function update_option( $option, $value, $autoload = null ) {
	global $wpdb;

	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(
				/* translators: 1: Deprecated option key, 2: New option key. */
				__( 'The "%1$s" option key has been renamed to "%2$s".' ),
				$option,
				$deprecated_keys[ $option ]
			)
		);
		return update_option( $deprecated_keys[ $option ], $value, $autoload );
	}

	wp_protect_special_option( $option );

	if ( is_object( $value ) ) {
		$value = clone $value;
	}

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

	$value = apply_filters( "pre_update_option_{$option}", $value, $old_value, $option );

	$value = apply_filters( 'pre_update_option', $value, $option, $old_value );

	if ( $value === $old_value || maybe_serialize( $value ) === maybe_serialize( $old_value ) ) {
		return false;
	}

	/** This filter is documented in wp-includes/option.php */
	if ( apply_filters( "default_option_{$option}", false, $option, false ) === $old_value ) {
		// Default setting for new options is 'yes'.
		if ( null === $autoload ) {
			$autoload = 'yes';
		}

		return add_option( $option, $value, '', $autoload );
	}

	$serialized_value = maybe_serialize( $value );

	do_action( 'update_option', $option, $old_value, $value );

	$update_args = array(
		'option_value' => $serialized_value,
	);

	if ( null !== $autoload ) {
		$update_args['autoload'] = ( 'no' === $autoload || false === $autoload ) ? 'no' : 'yes';
	}

	$result = $wpdb->update( $wpdb->options, $update_args, array( 'option_name' => $option ) );
	if ( ! $result ) {
		return false;
	}

	$notoptions = wp_cache_get( 'notoptions', 'options' );

	if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
		unset( $notoptions[ $option ] );
		wp_cache_set( 'notoptions', $notoptions, 'options' );
	}

	if ( ! wp_installing() ) {
		$alloptions = wp_load_alloptions( true );
		if ( isset( $alloptions[ $option ] ) ) {
			$alloptions[ $option ] = $serialized_value;
			wp_cache_set( 'alloptions', $alloptions, 'options' );
		} else {
			wp_cache_set( $option, $serialized_value, 'options' );
		}
	}

	do_action( "update_option_{$option}", $old_value, $value, $option );

	do_action( 'updated_option', $option, $old_value, $value );

	return true;
}


包含钩子:


apply_filters( "default_option_{$option}", mixed $default_value, string $option, bool $passed_default )

apply_filters( 'pre_update_option', mixed $value, string $option, mixed $old_value )

apply_filters( "pre_update_option_{$option}", mixed $value, mixed $old_value, string $option )

do_action( 'updated_option', string $option, mixed $old_value, mixed $value )

do_action( 'update_option', string $option, mixed $old_value, mixed $value )

do_action( "update_option_{$option}", mixed $old_value, mixed $value, string $option )


使用举例:


function my_switch_theme() {
	update_option( 'thumbnail_size_w', 320 );
	update_option( 'thumbnail_size_h', 180 );
}

add_action('switch_theme', 'my_switch_theme');


发表评论

暂无评论,抢个沙发...

客服 工单