Automattic\WooCommerce\Internal\OrderWithdrawal

OrderWithdrawalFormProcessor::get_matching_order │ private │ WC 1.0

Get an order only when the submitted email and order number match.

Method of the class: OrderWithdrawalFormProcessor{}

No Hooks.

Returns

null. Nothing (null).

Usage

// private - for code of main (parent) class only
$result = $this->get_matching_order( $data ): ?WC_Order;
$data(array<string,string>) (required)
Form data.

OrderWithdrawalFormProcessor::get_matching_order() code WC 11.1.2

private function get_matching_order( array $data ): ?WC_Order {
	$order_number = $this->normalize_order_number( $data[ self::FIELD_ORDER_NUMBER ] );
	$email        = $data[ self::FIELD_EMAIL ];

	if ( '' === $order_number || '' === $email ) {
		return null;
	}

	if ( ctype_digit( $order_number ) ) {
		$order = wc_get_order( (int) $order_number );

		if ( $order instanceof WC_Order && $this->order_matches_form_data( $order, $data ) ) {
			return $order;
		}
	}

	// Search by email first because the submitted order number may not be the internal order ID.
	$candidate_orders = wc_get_orders(
		array(
			'billing_email' => $email,
			'limit'         => -1,
			'orderby'       => 'date',
			'order'         => 'DESC',
			'return'        => 'objects',
		)
	);

	if ( ! is_array( $candidate_orders ) ) {
		return null;
	}

	foreach ( $candidate_orders as $order ) {
		if ( ! $order instanceof WC_Order ) {
			continue;
		}

		if ( $this->normalize_order_number( (string) $order->get_order_number() ) !== $order_number ) {
			continue;
		}

		if ( $this->order_matches_form_data( $order, $data ) ) {
			return $order;
		}
	}

	return null;
}