Here is the tested code, you can use it as a mu_plugin: ``` <?php /** * Filters whether to short-circuit default header status handling. * * Returning a non-false value from the filter will short-circuit the handling * and return early. * * @param bool $preempt Whether to short-circuit default header status handling. Default false. * @param WP_Query $wp_query WordPress Query object. * * @return bool * @since 4.5.0 */ function pre_handle_404_filter( bool $preempt, WP_Query $wp_query ) { global $parsed_address, $api_results; $parsed_address = get_parsed_address(); if ( ! $parsed_address ) { return $preempt; } // Make request to API, get status. $status = true; // For debug purposes. $api_results = null; if ( $status ) { // Save results to $api_results. // Return true to avoid 404 processing by WP. return true; } return $preempt; } add_filter( 'pre_handle_404', 'pre_handle_404_filter', 10, 2 ); /** * Handle 404. */ function handle_404() { global $parsed_address, $api_results, $wp_query; if ( ! $parsed_address ) { return; } // Set 404 here to prevent bugs in get_header(). $wp_query->set_404(); get_header(); echo 'API Results'; // Output $api_results here. get_footer(); exit(); } add_action( 'template_redirect', 'handle_404', - PHP_INT_MAX ); /** * Get parsed address from the request uri. * Make sure we have an address in the uri, otherwise return empty string. * * @return string */ function get_parsed_address() { $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? filter_var( wp_unslash( $_SERVER['REQUEST_URI'] ), FILTER_SANITIZE_STRING ) : ''; $path_parts = explode( '/', $request_uri ); $part1 = isset( $path_parts[1] ) ? $path_parts[1] : ''; if ( 'property' !== $part1 ) { return ''; } $address = isset( $path_parts[2] ) ? $path_parts[2] : ''; return str_replace( '-', ' ', $address ); } /** * Filter page title. * * @param array $title_parts Title parts. * * @return mixed */ function theme_slug_filter_wp_title( $title_parts ) { global $parsed_address, $api_results, $wp_query; if ( ! $parsed_address ) { return $title_parts; } $title_parts['title'] = ucwords( $parsed_address ) . ' | AAA Real Estate'; return $title_parts; } add_filter( 'document_title_parts', 'theme_slug_filter_wp_title' ); ``` We catch 404 via `pre_handle_404`, make the API request and save results. Please note that it works when we have parsed address in the uri only. Later, on `template_redirect` event, we check again that have parsed address and set back 404 status to prevent bugs in the get_header(). Please note that we intercept `template_redirect` as early as possible, at `- PHP_INT_MAX` priority to execute our code before standard `template_redirect` hook in the WP core.