Automattic\WooCommerce\Internal\OrderWithdrawal
OrderWithdrawalFormProcessor::get_matching_order
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() 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;
}