Automattic\WooCommerce\Internal\Fulfillments

OrderFulfillmentsRestController::update_fulfillment_metapublicWC 1.0

Update the metadata for a specific fulfillment.

Method of the class: OrderFulfillmentsRestController{}

No Hooks.

Returns

WP_REST_Response. The updated metadata for the fulfillment, or an error if the request fails.

Usage

$OrderFulfillmentsRestController = new OrderFulfillmentsRestController();
$OrderFulfillmentsRestController->update_fulfillment_meta( $request ): WP_REST_Response;
$request(WP_REST_Request) (required)
The request object.

OrderFulfillmentsRestController::update_fulfillment_meta() code WC 10.3.3

public function update_fulfillment_meta( WP_REST_Request $request ): WP_REST_Response {
	$order_id       = (int) $request->get_param( 'order_id' );
	$fulfillment_id = (int) $request->get_param( 'fulfillment_id' );

	// Update the metadata for the fulfillment.
	try {
		$fulfillment = new Fulfillment( $fulfillment_id );
		$this->validate_fulfillment( $fulfillment, $fulfillment_id, $order_id );

		// Update the meta data keys that exist in the request.
		foreach ( $request->get_json_params()['meta_data'] as $meta ) {
			$fulfillment->update_meta_data( $meta['key'], $meta['value'], $meta['id'] ?? 0 );
		}

		// Remove the meta data keys that don't exist in the request, by matching their keys.
		$existing_meta_data = $fulfillment->get_meta_data();
		foreach ( $existing_meta_data as $meta ) {
			if ( ! in_array( $meta->key, array_column( $request->get_json_params()['meta_data'], 'key' ), true ) ) {
				$fulfillment->delete_meta_data( $meta->key );
			}
		}
		$fulfillment->save();
	} catch ( ApiException $ex ) {
		return $this->prepare_error_response(
			$ex->getErrorCode(),
			$ex->getMessage(),
			WP_Http::BAD_REQUEST
		);
	} catch ( \Exception $e ) {
		return $this->prepare_error_response(
			$e->getCode(),
			$e->getMessage(),
			WP_Http::BAD_REQUEST
		);
	}

	return new WP_REST_Response(
		$fulfillment->get_raw_meta_data(),
		WP_Http::OK
	);
}