admin管理员组

文章数量:1297119

I would like to query only pages with a certain page template with WP_Query or a function that would return the post object, but I can't find any information about that on the official codex.

I would like to query only pages with a certain page template with WP_Query or a function that would return the post object, but I can't find any information about that on the official codex.

Share Improve this question edited Feb 4, 2019 at 22:13 Marc 7315 silver badges15 bronze badges asked Sep 30, 2011 at 19:20 Alexandre KirszenbergAlexandre Kirszenberg 3131 gold badge2 silver badges4 bronze badges
Add a comment  | 

5 Answers 5

Reset to default 27

UPDATE: This is now a decade old answer, meant for a very old version of WordPress. I can see the comments informing me that this might not work for newer WP versions, please do refer to the other answers below if mine is not working for your version of WP. For WP 2.*, this will work.

Try this... Assuming the template name is 'my_template.php',

$query = new WP_Query(
    array(
        'post_type' => 'page',
        'meta_key' => '_wp_page_template',
        'meta_value' => 'my_template.php'
    )
);
//Down goes the loop...

You can also use get_posts, or modify query posts to get the job done. Both these functions use the same parameters as WP_Query.

Incorrect: as of wordpress 3 you need something akin to:

$args = array(
    'post_type'  => 'page', 
    'meta_query' => array( 
        array(
            'key'   => '_wp_page_template', 
            'value' => 'my_template.php'
        )
    )
);

If you have the template inside another folder:

$args = array(
    'post_type' => 'page', //it is a Page right?
    'post_status' => 'publish',   
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'page-templates/template-name.php', // folder + template name as stored in the dB
        )
    )
);

The page template is stored as a meta value with key "_wp_page_template".

So all you need is to use that key in a meta query parameter. For examples

See http://codex.wordpress/Displaying_Posts_Using_a_Custom_Select_Query#Query_based_on_Custom_Field_and_Sorted_by_Value

and http://codex.wordpress/Class_Reference/WP_Query#Custom_Field_Parameters

If anyone's attempt incorrectly results in zero posts, probably the template name is wrong. I tried the php file name and my template name and they didn't work. Then I decided to inspect the templates select box where we select the template on the page editor. I found this:

<option value="templates-map/component-tutorial-1.php" 
 selected="selected">Tutorial -1</option>

I used templates-map/component-tutorial-1.php and it worked.

本文标签: Page template query with WPQuery