Automattic\WooCommerce\Admin\Features\Fulfillments
OrderFulfillmentsRestController::update_fulfillment_meta
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() OrderFulfillmentsRestController::update fulfillment meta code WC 10.8.1
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.
$meta_data = $request->get_json_params()['meta_data'];
$normalized_keys = is_array( $meta_data ) ? array_column( MetaDataUtil::normalize( $meta_data, 0 ), 'key' ) : array();
MetaDataUtil::update( $meta_data, $fulfillment, 0 );
// Remove meta keys not in the request. Skip if all entries were malformed
// (non-empty input but no valid keys), to avoid accidental data loss.
if ( empty( $meta_data ) || ! empty( $normalized_keys ) ) {
$existing_meta_data = $fulfillment->get_meta_data();
foreach ( $existing_meta_data as $meta ) {
if ( ! in_array( $meta->key, $normalized_keys, 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 ( \Throwable $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
);
}