cacheName = 'openstreetmaps'; parent::__construct(); $this->cache = Cache::for($this->cacheName, null, DAY_IN_SECONDS); } public function registerRoutes(): void { Route::for('geocode') ->get([$this, 'getGeocode']) ->auth(PermissionHandler::combine(['user'])) ->args(['q'=> 'string|required']) ->rateLimit(1,1) ->register(); } public function getGeocode(WP_REST_Request $request): WP_REST_Response { $query = sanitize_text_field($request->get_param( 'q' )); $userAgent = str_replace(' ', '', get_bloginfo('name')). ' (' . get_option('admin_email').')'; $response = wp_remote_get( 'https://nominatim.openstreetmap.org/search?' . http_build_query( [ 'format' => 'json', 'addressdetails' => 1, 'limit' => 5, 'q' => $query, ] ), [ 'headers' => [ 'User-Agent' => $userAgent ] ] ); return rest_ensure_response( json_decode( wp_remote_retrieve_body( $response ) ) ); } }