diff --git a/wp-includes/theme.php b/wp-includes/theme.php
index 5bc6287d30..46c1cf1740 100644
--- a/wp-includes/theme.php
+++ b/wp-includes/theme.php
@@ -728,30 +728,26 @@ function get_raw_theme_root( $stylesheet_or_template, $no_cache = false ) {
/**
* Retrieve path to a template
*
- * Used to quickly retrieve the path of file without including the file
- * extension. It will also check the parent template, if the file exists, with
- * the use of {@link locate_template()}. Allows for more generic file location
+ * Used to quickly retrieve the path of a template without including the file
+ * extension. It will also check the parent theme, if the file exists, with
+ * the use of {@link locate_template()}. Allows for more generic template location
* without the use of the other get_*_template() functions.
*
- * Can be used with include() or require() to retrieve path.
- *
- * if( '' != get_query_template( '404' ) )
- * include( get_query_template( '404' ) );
- *
- * or the same can be accomplished with
- *
- * if( '' != get_404_template() )
- * include( get_404_template() );
- *
- *
* @since 1.5.0
*
* @param string $type Filename without extension.
+ * @param array $templates An optional list of template candidates
* @return string Full path to file.
*/
-function get_query_template($type) {
+function get_query_template( $type, $templates = array() ) {
$type = preg_replace( '|[^a-z0-9-]+|', '', $type );
- return apply_filters("{$type}_template", locate_template(array("{$type}.php")));
+
+ if ( empty( $templates ) )
+ $templates = array("{$type}.php");
+
+ $templates = apply_filters( "{$type}_template_hierarchy", $templates );
+
+ return apply_filters( "{$type}_template", locate_template( $templates ) );
}
/**
@@ -811,8 +807,7 @@ function get_author_template() {
$templates[] = "author-{$author->ID}.php";
$templates[] = 'author.php';
- $template = locate_template( $templates );
- return apply_filters( 'author_template', $template );
+ return get_query_template( 'author', $templates );
}
/**
@@ -836,8 +831,7 @@ function get_category_template() {
$templates[] = "category-{$category->term_id}.php";
$templates[] = "category.php";
- $template = locate_template($templates);
- return apply_filters('category_template', $template);
+ return get_query_template( 'category', $templates );
}
/**
@@ -861,8 +855,7 @@ function get_tag_template() {
$templates[] = "tag-{$tag->term_id}.php";
$templates[] = "tag.php";
- $template = locate_template($templates);
- return apply_filters('tag_template', $template);
+ return get_query_template( 'tag', $templates );
}
/**
@@ -892,8 +885,7 @@ function get_taxonomy_template() {
$templates[] = "taxonomy-$taxonomy.php";
$templates[] = "taxonomy.php";
- $template = locate_template($templates);
- return apply_filters('taxonomy_template', $template);
+ return get_query_template( 'taxonomy', $templates );
}
/**
@@ -920,8 +912,9 @@ function get_date_template() {
* @return string
*/
function get_home_template() {
- $template = locate_template(array('home.php', 'index.php'));
- return apply_filters('home_template', $template);
+ $templates = array( 'home.php', 'index.php' );
+
+ return get_query_template( 'home', $templates );
}
/**
@@ -935,7 +928,9 @@ function get_home_template() {
* @return string
*/
function get_front_page_template() {
- return apply_filters( 'front_page_template', locate_template( array('front-page.php') ) );
+ $templates = array('front-page.php');
+
+ return get_query_template( 'front_page', $templates );
}
/**
@@ -972,7 +967,7 @@ function get_page_template() {
$templates[] = "page-$id.php";
$templates[] = "page.php";
- return apply_filters('page_template', locate_template($templates));
+ return get_query_template( 'page', $templates );
}
/**
@@ -1055,13 +1050,13 @@ function get_attachment_template() {
* @return string
*/
function get_comments_popup_template() {
- $template = locate_template(array("comments-popup.php"));
+ $template = get_query_template( 'comments_popup', array( 'comments-popup.php' ) );
// Backward compat code will be removed in a future release
if ('' == $template)
$template = ABSPATH . WPINC . '/theme-compat/comments-popup.php';
- return apply_filters('comments_popup_template', $template);
+ return $template;
}
/**