> */ public static function hydrate_logged_in_customer( int $user_id, string $user_email = '' ): array { $payload = self::build_customer_update_payload( $user_id, $user_email ); self::apply_payload_to_active_customer( $payload ); return $payload; } /** * @return array> */ public static function build_customer_update_payload( int $user_id, string $user_email = '' ): array { if ( $user_id <= 0 || ! function_exists( 'WC' ) ) { return self::empty_payload(); } return CheckoutCustomerProfileResolver::resolve( $user_id, $user_email, WC()->checkout() ); } /** * @param array> $payload */ private static function apply_payload_to_active_customer( array $payload ): void { if ( ! function_exists( 'WC' ) || ! WC()->customer ) { return; } try { $billing = is_array( $payload['billing_address'] ?? null ) ? $payload['billing_address'] : []; $shipping = is_array( $payload['shipping_address'] ?? null ) ? $payload['shipping_address'] : []; WC()->customer->set_props( [ 'billing_first_name' => $billing['first_name'] ?? null, 'billing_last_name' => $billing['last_name'] ?? null, 'billing_company' => $billing['company'] ?? null, 'billing_address_1' => $billing['address_1'] ?? null, 'billing_address_2' => $billing['address_2'] ?? null, 'billing_city' => $billing['city'] ?? null, 'billing_state' => $billing['state'] ?? null, 'billing_postcode' => $billing['postcode'] ?? null, 'billing_country' => $billing['country'] ?? null, 'billing_phone' => $billing['phone'] ?? null, 'billing_email' => $billing['email'] ?? null, 'shipping_first_name' => $shipping['first_name'] ?? null, 'shipping_last_name' => $shipping['last_name'] ?? null, 'shipping_company' => $shipping['company'] ?? null, 'shipping_address_1' => $shipping['address_1'] ?? null, 'shipping_address_2' => $shipping['address_2'] ?? null, 'shipping_city' => $shipping['city'] ?? null, 'shipping_state' => $shipping['state'] ?? null, 'shipping_postcode' => $shipping['postcode'] ?? null, 'shipping_country' => $shipping['country'] ?? null, 'shipping_phone' => $shipping['phone'] ?? null, ] ); WC()->customer->save(); if ( WC()->session && method_exists( WC()->session, 'set_customer_session_cookie' ) ) { WC()->session->set_customer_session_cookie( true ); } if ( WC()->session && method_exists( WC()->session, 'save_data' ) ) { WC()->session->save_data(); } if ( WC()->cart ) { WC()->cart->calculate_totals(); } } catch ( Throwable $throwable ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[IPS Order Cart] Unable to apply hydrated customer payload: ' . $throwable->getMessage() ); } } } /** * @return array> */ private static function empty_payload(): array { return [ 'billing_address' => [], 'shipping_address' => [], ]; } }