Luke Stevenson
Luke Stevenson

Reputation: 10351

Wordpress - Build one Page to use URL to pull data from REST API

I'd appreciate any advice, resources or assistance with this issue.

I want to be able to have part of my Wordpress site where I can parse the URL and then use those values to populate the page with content from another API.

For example:

server.zz/weather/Sydney%20Australia

server.zz/weather/Houston%20Texas

Where I could write a Plugin which would intercept these requests, be able to extract the end of the URLs, and then call another API to get the data to then merge into a Template to be presented to the visitor.

I know that there are Custom Post Types, but I wasn't sure if they were the best solution for this usage case.

As I said, any advice or suggestions would be appreciated.

Upvotes: 1

Views: 160

Answers (1)

Luke Stevenson
Luke Stevenson

Reputation: 10351

I found the solution to this problem by using add_rewrite_rule(), add_rewrite_endpoint(), and flush_rewrite_rule().

For the example I provided earlier, I created the following code in a Plugin.

// Define the URL Rewrite Rules
function crw_rewrite_urls(){
  add_rewrite_rule(
    '^weather/(.+)$' ,
    'index.php?weather_location=$matches[1]' ,
    'top'
  );
  add_rewrite_endpoint('weather_location', EP_ROOT);
  flush_rewrite_rules();
}
add_action('init', 'crw_rewrite_urls');

// Initialise the Query Variable
function crw_query_var( $vars ) {
  $vars[] = 'weather_location';
  return $vars;
}

// Check for the Variable and Display Content as needed
function crw_handler() {
  global $wp_query;
  if ( isset( $wp_query->query_vars['weather_location'] ) ) {
    // Call the API, fill the Template here
  }
  return;
}
add_action('template_redirect', 'crw_handler');

Upvotes: 1

Related Questions