Automattic\WooCommerce\Admin\Features\Fulfillments

OrderFulfillmentsRestController::maybe_track_tracking_addedprivateWC 1.0

Track fulfillment_tracking_added if tracking information was added or changed.

For new fulfillments ($changes is empty), fires whenever a tracking number is present. For updates, only fires when tracking-related meta (_tracking_number, _shipment_provider, or _tracking_url) actually changed.

Method of the class: OrderFulfillmentsRestController{}

No Hooks.

Returns

null. Nothing (null).

Usage

// private - for code of main (parent) class only
$result = $this->maybe_track_tracking_added( $fulfillment, $request, $changes ): void;
$fulfillment(Fulfillment) (required)
The fulfillment object (after save).
$request(WP_REST_Request) (required)
The original request.
$changes(array)
The changes from Fulfillment::get_changes(), empty for creates.
Default: array()

OrderFulfillmentsRestController::maybe_track_tracking_added() code WC 10.8.1

private function maybe_track_tracking_added( Fulfillment $fulfillment, WP_REST_Request $request, array $changes = array() ): void {
	$tracking_number = $fulfillment->get_tracking_number();
	if ( empty( $tracking_number ) ) {
		return;
	}

	// For updates, only track when tracking-related meta actually changed.
	if ( ! empty( $changes ) ) {
		$meta_changes     = $changes['meta_data'] ?? array();
		$tracking_changed = array_key_exists( '_tracking_number', $meta_changes )
			|| array_key_exists( '_shipment_provider', $meta_changes )
			|| array_key_exists( '_tracking_url', $meta_changes );
		if ( ! $tracking_changed ) {
			return;
		}
	}

	$source            = $this->check_request_source( $request );
	$shipping_option   = $fulfillment->get_meta( '_shipping_option', true );
	$shipping_option   = ! empty( $shipping_option ) ? $shipping_option : '';
	$shipment_provider = $fulfillment->get_shipment_provider() ?? '';
	$is_custom         = 'other' === $shipment_provider;

	$entry_method      = FulfillmentsTracker::determine_tracking_entry_method( $source, $shipping_option );
	$resolved_provider = FulfillmentUtils::resolve_provider_name( $fulfillment );

	FulfillmentsTracker::track_fulfillment_tracking_added(
		$fulfillment->get_id(),
		$entry_method,
		$resolved_provider,
		$is_custom
	);
}