Automattic\WooCommerce\Admin\Features\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.7.0
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 ) {
$parsing_result = $provider->try_parse_tracking_number( $tracking_number, $shipping_from, $shipping_to );
if ( ! is_null( $parsing_result ) ) {
$results[ $provider->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.
}
if ( isset( $results['shipping_provider'] ) ) {
// Record the tracking lookup attempt with url_generated indicating if a tracking URL was constructed.
FulfillmentsTracker::track_fulfillment_tracking_lookup_attempt( 'success', $results['shipping_provider'], ! empty( $results['tracking_url'] ) );
} else {
// If no provider could parse the tracking number, record a failure.
FulfillmentsTracker::track_fulfillment_tracking_lookup_attempt( 'not_found', '', false );
}
return $results;
}