protected function update_multi_meta_value( $object_id, $name, $values ) {
		if ( ! current_user_can( 'edit_post_meta', $object_id, $name ) ) {
			return new WP_Error(
				'rest_cannot_update',
				sprintf( __( 'You do not have permission to edit the %s custom field.' ), $name ),
				array( 'key' => $name, 'status' => rest_authorization_required_code() )
			);
		}

		$current = get_metadata( $this->get_meta_type(), $object_id, $name, false );

		$to_remove = $current;
		$to_add = $values;
		foreach ( $to_add as $add_key => $value ) {
			$remove_keys = array_keys( $to_remove, $value, true );
			if ( empty( $remove_keys ) ) {
				continue;
			}

			if ( count( $remove_keys ) > 1 ) {
				// To remove, we need to remove first, then add, so don't touch.
				continue;
			}

			$remove_key = $remove_keys[0];
			unset( $to_remove[ $remove_key ] );
			unset( $to_add[ $add_key ] );
		}

		// `delete_metadata` removes _all_ instances of the value, so only call
		// once.
		$to_remove = array_unique( $to_remove );
		foreach ( $to_remove as $value ) {
			if ( ! delete_metadata( $this->get_meta_type(), $object_id, wp_slash( $name ), wp_slash( $value ) ) ) {
				return new WP_Error(
					'rest_meta_database_error',
					__( 'Could not update meta value in database.' ),
					array( 'key' => $name, 'status' => WP_Http::INTERNAL_SERVER_ERROR )
				);
			}
		}
		foreach ( $to_add as $value ) {
			if ( ! add_metadata( $this->get_meta_type(), $object_id, wp_slash( $name ), wp_slash( $value ) ) ) {
				return new WP_Error(
					'rest_meta_database_error',
					__( 'Could not update meta value in database.' ),
					array( 'key' => $name, 'status' => WP_Http::INTERNAL_SERVER_ERROR )
				);
			}
		}

		return true;
	}
protected function update_multi_meta_value( $object_id, $name, $values ) {
		if ( ! current_user_can( 'edit_post_meta', $object_id, $name ) ) {
			return new WP_Error(
				'rest_cannot_update',
				sprintf( __( 'You do not have permission to edit the %s custom field.' ), $name ),
				array( 'key' => $name, 'status' => rest_authorization_required_code() )
			);
		}

		$current = get_metadata( $this->get_meta_type(), $object_id, $name, false );

		$to_remove = $current;
		$to_add = $values;
		foreach ( $to_add as $add_key => $value ) {
			$remove_keys = array_keys( $to_remove, $value, true );
			if ( empty( $remove_keys ) ) {
				continue;
			}

			if ( count( $remove_keys ) > 1 ) {
				// To remove, we need to remove first, then add, so don't touch.
				continue;
			}

			$remove_key = $remove_keys[0];
			unset( $to_remove[ $remove_key ] );
			unset( $to_add[ $add_key ] );
		}

		// `delete_metadata` removes _all_ instances of the value, so only call
		// once.
		$to_remove = array_unique( $to_remove );
		foreach ( $to_remove as $value ) {
			if ( ! delete_metadata( $this->get_meta_type(), $object_id, wp_slash( $name ), wp_slash( $value ) ) ) {
				return new WP_Error(
					'rest_meta_database_error',
					__( 'Could not update meta value in database.' ),
					array( 'key' => $name, 'status' => WP_Http::INTERNAL_SERVER_ERROR )
				);
			}
		}
		foreach ( $to_add as $value ) {
			if ( ! add_metadata( $this->get_meta_type(), $object_id, wp_slash( $name ), wp_slash( $value ) ) ) {
				return new WP_Error(
					'rest_meta_database_error',
					__( 'Could not update meta value in database.' ),
					array( 'key' => $name, 'status' => WP_Http::INTERNAL_SERVER_ERROR )
				);
			}
		}

		return true;
	}
protected function update_multi_meta_value ( $ object_id , $ name , $ values ) { if ( ! current_user_can ( 'edit_post_meta' , $ object_id , $ name ) ) { return new WP_Error ( 'rest_cannot_update' , sprintf ( __ ( 'You do not have permission to edit the %s custom field.' ) , $ name ) , array ( 'key' => $ name , 'status' => rest_authorization_required_code ( ) ) ) ; } $ current = get_metadata ( $ this -> get_meta_type ( ) , $ object_id , $ name , false ) ; $ to_remove = $ current ; $ to_add = $ values ; foreach ( $ to_add as $ add_key => $ value ) { $ remove_keys = array_keys ( $ to_remove , $ value , true ) ; if ( empty ( $ remove_keys ) ) { continue ; } if ( count ( $ remove_keys ) > 1 ) { // To remove, we need to remove first, then add, so don't touch. continue ; } $ remove_key = $ remove_keys [ 0 ] ; unset ( $ to_remove [ $ remove_key ] ) ; unset ( $ to_add [ $ add_key ] ) ; } // `delete_metadata` removes _all_ instances of the value, so only call // once. $ to_remove = array_unique ( $ to_remove ) ; foreach ( $ to_remove as $ value ) { if ( ! delete_metadata ( $ this -> get_meta_type ( ) , $ object_id , wp_slash ( $ name ) , wp_slash ( $ value ) ) ) { return new WP_Error ( 'rest_meta_database_error' , __ ( 'Could not update meta value in database.' ) , array ( 'key' => $ name , 'status' => WP_Http :: INTERNAL_SERVER_ERROR ) ) ; } } foreach ( $ to_add as $ value ) { if ( ! add_metadata ( $ this -> get_meta_type ( ) , $ object_id , wp_slash ( $ name ) , wp_slash ( $ value ) ) ) { return new WP_Error ( 'rest_meta_database_error' , __ ( 'Could not update meta value in database.' ) , array ( 'key' => $ name , 'status' => WP_Http :: INTERNAL_SERVER_ERROR ) ) ; } } return true ; }
Update multiple meta values for an object.

Alters the list of values in the database to match the list of provided values.

@param int    $object_id Object ID to update.
@param string $name      Key for the custom field.
@param array  $values    List of values to update to.
@return bool|WP_Error True if meta fields are updated, error otherwise.
Update multiple meta values for an object .