Eric
Eric

Reputation: 646

Virtual Page Within Theme Template

I am creating a plugin that needs a virtual page in order to dynamically create a "Review Order" page (Orders are a custom post type I created). I was able to create a virtual page using the following code:

// Set up the rewrite rules for the order page
add_action( 'init', 'action_init_redirect' );
function action_init_redirect() {
  add_rewrite_rule( 'orders/?', 'index.php?orders=new', 'top' );
}

add_filter( 'query_vars', 'filter_query_vars' );
function filter_query_vars( $query_vars ) {
  $query_vars[] = 'orders';
  return $query_vars;
}

add_action( 'parse_request', 'action_parse_request');
function action_parse_request( &$wp ) {
  if ( array_key_exists( 'orders', $wp->query_vars ) ) {

    //Beginning of page code

    echo "hello";
    exit;
  }
}

The problem is that this creates a page with a blank template, that is, the above code creates a blank page with the text hello. I would like for the virtual page to be within the theme of the site and displayed like a regular page within the WordPress framework. How to accomplish this?

Upvotes: 0

Views: 748

Answers (2)

brasofilo
brasofilo

Reputation: 26075

A solution is to add a template page inside parse_request:

function action_parse_request( $wp ) {
    if ( array_key_exists( 'virtual', $wp->query_vars ) ) {
        get_header(); ?>    
        <div id="primary">
            <div id="content" role="main">    
                Hello, world!    
            </div>
        </div>
        <?php get_footer();
        exit;
    }
}

Upvotes: 2

danyo
danyo

Reputation: 5856

try using the following:

define('WP_USE_THEMES', true);
require('/ABSOLUTE_PATH_HERE/wp-blog-header.php');
require('/ABSOLUTE_PATH_HERE/wp-load.php');   

you will need to add this to the top of your page.

Upvotes: 0

Related Questions