Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I am trying to include a special Archive page with my theme, right now I have a PHP file with

Template Name: Archives Template at the top and I the user must create a blank archive POST PAGE and then select this as the template.

The content for creating the page is blank so nothing is added into the database for the page content. Is there anyway to make it where they do not have to do this?

share|improve this question
    
Are you trying to get an archive for a custom post type? –  Brian Fegter Jan 1 '12 at 6:26
    
No archive was just used for an example, I am trying to add a page to a theme without making the user add a page to the DB –  jasondavis Jan 1 '12 at 7:49
add comment

1 Answer

up vote 6 down vote accepted

To wit, this technically isn't a 'page', however it's a way to surface content using mod_rewrite. The goal here is to add a URI segment of foobar that will trigger a custom query, then include the specified template file.

Add a rewrite rule:

add_action('init', 'foo_add_rewrite_rule');
function foo_add_rewrite_rule(){
    add_rewrite_rule('^foobar?','index.php?is_foobar_page=1&post_type=custom_post_type','top');
    //Customize this query string - keep is_foobar_page=1 intact
}

See the WP_Query documentation for more information about customizing the query string.

Register a new query var:

add_action('query_vars','foo_set_query_var');
function foo_set_query_var($vars) {
    array_push($vars, 'is_foobar_page');
    return $vars;
}

Force WP to select your page template:

add_filter('template_include', 'foo_include_template', 1000, 1);
function foo_include_template($template){
    if(get_query_var('is_foobar_page')){
        $new_template = WP_CONTENT_DIR.'/themes/your-theme/template-name.php';
        if(file_exists($new_template))
            $template = $new_template;
    }
    return $template;
}

Flush the rewrites by visiting Settings->Permalinks, then visit http://yourdomain.com/foobar

share|improve this answer
    
Thanks this is so useful –  jasondavis Jan 4 '12 at 0:16
    
:) Glad to help. –  Brian Fegter Jan 4 '12 at 2:01
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.