WC_Data::update_meta_data()publicWC 2.6.0

Update meta data by key or ID, if provided.

Метод класса: WC_Data{}

Хуков нет.

Возвращает

null. Ничего (null).

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

$WC_Data = new WC_Data();
$WC_Data->update_meta_data( $key, $value, $meta_id );
$key(строка) (обязательный)
Meta key.
$value(строка|массив) (обязательный)
Meta value.
$meta_id(int)
Meta ID.

Список изменений

С версии 2.6.0 Введена.

Код WC_Data::update_meta_data() WC 8.7.0

public function update_meta_data( $key, $value, $meta_id = 0 ) {
	if ( $this->is_internal_meta_key( $key ) ) {
		$function = 'set_' . ltrim( $key, '_' );

		if ( is_callable( array( $this, $function ) ) ) {
			return $this->{$function}( $value );
		}
	}

	$this->maybe_read_meta_data();

	$array_key = false;

	if ( $meta_id ) {
		$array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), $meta_id, true );
		$array_key  = $array_keys ? current( $array_keys ) : false;
	} else {
		// Find matches by key.
		$matches = array();
		foreach ( $this->meta_data as $meta_data_array_key => $meta ) {
			if ( $meta->key === $key ) {
				$matches[] = $meta_data_array_key;
			}
		}

		if ( ! empty( $matches ) ) {
			// Set matches to null so only one key gets the new value.
			foreach ( $matches as $meta_data_array_key ) {
				$this->meta_data[ $meta_data_array_key ]->value = null;
			}
			$array_key = current( $matches );
		}
	}

	if ( false !== $array_key ) {
		$meta        = $this->meta_data[ $array_key ];
		$meta->key   = $key;
		$meta->value = $value;
	} else {
		$this->add_meta_data( $key, $value, true );
	}
}