Automattic\WooCommerce\Internal\Fulfillments
FulfillmentsManager::try_parse_tracking_number
Try to parse the tracking number with additional parameters.
Method of the class: FulfillmentsManager{}
No Hooks.
Returns
Array. An array containing the provider as key, and the parsing results.
Usage
$FulfillmentsManager = new FulfillmentsManager(); $FulfillmentsManager->try_parse_tracking_number( $tracking_number, $shipping_from, $shipping_to ): array;
- $tracking_number(string) (required)
- The tracking number.
- $shipping_from(string) (required)
- The country code from which the shipment is sent.
- $shipping_to(string) (required)
- The country code to which the shipment is sent.
FulfillmentsManager::try_parse_tracking_number() FulfillmentsManager::try parse tracking number code WC 10.3.3
public function try_parse_tracking_number( string $tracking_number, string $shipping_from, string $shipping_to ): array {
// Validate the tracking number format and length.
if ( ! is_string( $tracking_number ) || empty( $tracking_number ) || strlen( $tracking_number ) > 50 ) {
$tracking_number = is_string( $tracking_number ) && ! empty( $tracking_number ) ? substr( $tracking_number, 0, 50 ) : '';
return array(
'tracking_number' => $tracking_number,
'shipping_provider' => '',
'tracking_url' => '',
);
}
// Normalize the tracking number to uppercase.
$tracking_number = strtoupper( $tracking_number );
$tracking_number = preg_replace( '/[^A-Z0-9]/', '', $tracking_number ); // Remove non-alphanumeric characters.
$shipping_providers = FulfillmentUtils::get_shipping_providers();
$results = array();
foreach ( $shipping_providers as $provider ) {
if ( class_exists( $provider ) && is_subclass_of( $provider, AbstractShippingProvider::class ) ) {
try {
/**
* Instantiate the shipping provider class.
*
* @var AbstractShippingProvider $provider_instance
*/
$provider_instance = wc_get_container()->get( $provider );
} catch ( \Throwable $e ) {
$logger = wc_get_logger();
$logger->error(
sprintf(
'Error instantiating shipping provider class %s: %s',
$provider,
$e->getMessage()
),
array( 'source' => 'woocommerce-fulfillments' )
);
continue; // Skip if the provider class cannot be instantiated.
}
} else {
continue; // Skip if the provider class does not exist or is not a valid shipping provider.
}
$parsing_result = $provider_instance->try_parse_tracking_number( $tracking_number, $shipping_from, $shipping_to );
if ( ! is_null( $parsing_result ) ) {
$results[ $provider_instance->get_key() ] = $parsing_result;
}
}
if ( 1 === count( $results ) ) {
$result = reset( $results );
$key = key( $results );
$results = array(
'tracking_number' => $tracking_number,
'shipping_provider' => $key,
'tracking_url' => $result['url'] ?? '',
);
} elseif ( 1 < count( $results ) ) {
// If multiple providers could parse the tracking number, find the one with the highest ambiguity score.
$possibilities = $results;
$results = $this->get_best_parsing_result( $results, $tracking_number );
$results['possibilities'] = $possibilities; // Include all possibilities for reference.
}
return $results;
}