get_query_template

The timeline below displays how wordpress function get_query_template has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.1

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieves path to a template.
 *
 * 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 locate_template(). Allows for more generic template location
 * without the use of the other get_*_template() functions.
 *
 * @since 1.5.0
 *
 * @param string   $type      Filename without extension.
 * @param string[] $templates An optional list of template candidates.
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    /**
     * Filters the list of template filenames that are searched for when retrieving a template to use.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * The last element in the array should always be the fallback template for this query type.
     *
     * Possible hook names include:
     *
     *  - `404_template_hierarchy`
     *  - `archive_template_hierarchy`
     *  - `attachment_template_hierarchy`
     *  - `author_template_hierarchy`
     *  - `category_template_hierarchy`
     *  - `date_template_hierarchy`
     *  - `embed_template_hierarchy`
     *  - `frontpage_template_hierarchy`
     *  - `home_template_hierarchy`
     *  - `index_template_hierarchy`
     *  - `page_template_hierarchy`
     *  - `paged_template_hierarchy`
     *  - `privacypolicy_template_hierarchy`
     *  - `search_template_hierarchy`
     *  - `single_template_hierarchy`
     *  - `singular_template_hierarchy`
     *  - `tag_template_hierarchy`
     *  - `taxonomy_template_hierarchy`
     *
     * @since 4.7.0
     *
     * @param string[] $templates A list of template candidates, in descending order of priority.
     */
    $templates = apply_filters("{$type}_template_hierarchy", $templates);
    $template = locate_template($templates);
    $template = locate_block_template($template, $type, $templates);
    /**
     * Filters the path of the queried template by type.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * This hook also applies to various types of files loaded as part of the Template Hierarchy.
     *
     * Possible hook names include:
     *
     *  - `404_template`
     *  - `archive_template`
     *  - `attachment_template`
     *  - `author_template`
     *  - `category_template`
     *  - `date_template`
     *  - `embed_template`
     *  - `frontpage_template`
     *  - `home_template`
     *  - `index_template`
     *  - `page_template`
     *  - `paged_template`
     *  - `privacypolicy_template`
     *  - `search_template`
     *  - `single_template`
     *  - `singular_template`
     *  - `tag_template`
     *  - `taxonomy_template`
     *
     * @since 1.5.0
     * @since 4.8.0 The `$type` and `$templates` parameters were added.
     *
     * @param string   $template  Path to the template. See locate_template().
     * @param string   $type      Sanitized filename without extension.
     * @param string[] $templates A list of template candidates, in descending order of priority.
     */
    return apply_filters("{$type}_template", $template, $type, $templates);
}

WordPress Version: 5.8

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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 locate_template(). Allows for more generic template location
 * without the use of the other get_*_template() functions.
 *
 * @since 1.5.0
 *
 * @param string   $type      Filename without extension.
 * @param string[] $templates An optional list of template candidates.
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    /**
     * Filters the list of template filenames that are searched for when retrieving a template to use.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * The last element in the array should always be the fallback template for this query type.
     *
     * Possible hook names include:
     *
     *  - `404_template_hierarchy`
     *  - `archive_template_hierarchy`
     *  - `attachment_template_hierarchy`
     *  - `author_template_hierarchy`
     *  - `category_template_hierarchy`
     *  - `date_template_hierarchy`
     *  - `embed_template_hierarchy`
     *  - `frontpage_template_hierarchy`
     *  - `home_template_hierarchy`
     *  - `index_template_hierarchy`
     *  - `page_template_hierarchy`
     *  - `paged_template_hierarchy`
     *  - `privacypolicy_template_hierarchy`
     *  - `search_template_hierarchy`
     *  - `single_template_hierarchy`
     *  - `singular_template_hierarchy`
     *  - `tag_template_hierarchy`
     *  - `taxonomy_template_hierarchy`
     *
     * @since 4.7.0
     *
     * @param string[] $templates A list of template candidates, in descending order of priority.
     */
    $templates = apply_filters("{$type}_template_hierarchy", $templates);
    $template = locate_template($templates);
    $template = locate_block_template($template, $type, $templates);
    /**
     * Filters the path of the queried template by type.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * This hook also applies to various types of files loaded as part of the Template Hierarchy.
     *
     * Possible hook names include:
     *
     *  - `404_template`
     *  - `archive_template`
     *  - `attachment_template`
     *  - `author_template`
     *  - `category_template`
     *  - `date_template`
     *  - `embed_template`
     *  - `frontpage_template`
     *  - `home_template`
     *  - `index_template`
     *  - `page_template`
     *  - `paged_template`
     *  - `privacypolicy_template`
     *  - `search_template`
     *  - `single_template`
     *  - `singular_template`
     *  - `tag_template`
     *  - `taxonomy_template`
     *
     * @since 1.5.0
     * @since 4.8.0 The `$type` and `$templates` parameters were added.
     *
     * @param string   $template  Path to the template. See locate_template().
     * @param string   $type      Sanitized filename without extension.
     * @param string[] $templates A list of template candidates, in descending order of priority.
     */
    return apply_filters("{$type}_template", $template, $type, $templates);
}

WordPress Version: 5.2

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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 locate_template(). Allows for more generic template location
 * without the use of the other get_*_template() functions.
 *
 * @since 1.5.0
 *
 * @param string $type      Filename without extension.
 * @param array  $templates An optional list of template candidates
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    /**
     * Filters the list of template filenames that are searched for when retrieving a template to use.
     *
     * The last element in the array should always be the fallback template for this query type.
     *
     * Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date',
     * 'embed', 'home', 'frontpage', 'privacypolicy', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
     *
     * @since 4.7.0
     *
     * @param array $templates A list of template candidates, in descending order of priority.
     */
    $templates = apply_filters("{$type}_template_hierarchy", $templates);
    $template = locate_template($templates);
    /**
     * Filters the path of the queried template by type.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * This hook also applies to various types of files loaded as part of the Template Hierarchy.
     *
     * Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date',
     * 'embed', 'home', 'frontpage', 'privacypolicy', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
     *
     * @since 1.5.0
     * @since 4.8.0 The `$type` and `$templates` parameters were added.
     *
     * @param string $template  Path to the template. See locate_template().
     * @param string $type      Sanitized filename without extension.
     * @param array  $templates A list of template candidates, in descending order of priority.
     */
    return apply_filters("{$type}_template", $template, $type, $templates);
}

WordPress Version: 4.9

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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 locate_template(). Allows for more generic template location
 * without the use of the other get_*_template() functions.
 *
 * @since 1.5.0
 *
 * @param string $type      Filename without extension.
 * @param array  $templates An optional list of template candidates
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    /**
     * Filters the list of template filenames that are searched for when retrieving a template to use.
     *
     * The last element in the array should always be the fallback template for this query type.
     *
     * Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date',
     * 'embed', 'home', 'frontpage', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
     *
     * @since 4.7.0
     *
     * @param array $templates A list of template candidates, in descending order of priority.
     */
    $templates = apply_filters("{$type}_template_hierarchy", $templates);
    $template = locate_template($templates);
    /**
     * Filters the path of the queried template by type.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * This hook also applies to various types of files loaded as part of the Template Hierarchy.
     *
     * Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date',
     * 'embed', 'home', 'frontpage', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
     *
     * @since 1.5.0
     * @since 4.8.0 The `$type` and `$templates` parameters were added.
     *
     * @param string $template  Path to the template. See locate_template().
     * @param string $type      Filename without extension.
     * @param array  $templates A list of template candidates, in descending order of priority.
     */
    return apply_filters("{$type}_template", $template, $type, $templates);
}

WordPress Version: 4.8

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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 locate_template(). Allows for more generic template location
 * without the use of the other get_*_template() functions.
 *
 * @since 1.5.0
 *
 * @param string $type      Filename without extension.
 * @param array  $templates An optional list of template candidates
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    /**
     * Filters the list of template filenames that are searched for when retrieving a template to use.
     *
     * The last element in the array should always be the fallback template for this query type.
     *
     * Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date',
     * 'embed', home', 'frontpage', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
     *
     * @since 4.7.0
     *
     * @param array $templates A list of template candidates, in descending order of priority.
     */
    $templates = apply_filters("{$type}_template_hierarchy", $templates);
    $template = locate_template($templates);
    /**
     * Filters the path of the queried template by type.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * This hook also applies to various types of files loaded as part of the Template Hierarchy.
     *
     * Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date',
     * 'embed', home', 'frontpage', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
     *
     * @since 1.5.0
     * @since 4.8.0 The `$type` and `$templates` parameters were added.
     *
     * @param string $template  Path to the template. See locate_template().
     * @param string $type      Filename without extension.
     * @param array  $templates A list of template candidates, in descending order of priority.
     */
    return apply_filters("{$type}_template", $template, $type, $templates);
}

WordPress Version: 4.7

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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 locate_template(). Allows for more generic template location
 * without the use of the other get_*_template() functions.
 *
 * @since 1.5.0
 *
 * @param string $type      Filename without extension.
 * @param array  $templates An optional list of template candidates
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    /**
     * Filters the list of template filenames that are searched for when retrieving a template to use.
     *
     * The last element in the array should always be the fallback template for this query type.
     *
     * Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date',
     * 'embed', home', 'frontpage', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
     *
     * @since 4.7.0
     *
     * @param array $templates A list of template candidates, in descending order of priority.
     */
    $templates = apply_filters("{$type}_template_hierarchy", $templates);
    $template = locate_template($templates);
    /**
     * Filters the path of the queried template by type.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * This hook also applies to various types of files loaded as part of the Template Hierarchy.
     *
     * Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date',
     * 'embed', home', 'frontpage', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
     *
     * @since 1.5.0
     *
     * @param string $template Path to the template. See locate_template().
     */
    return apply_filters("{$type}_template", $template);
}

WordPress Version: 4.6

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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 locate_template(). Allows for more generic template location
 * without the use of the other get_*_template() functions.
 *
 * @since 1.5.0
 *
 * @param string $type      Filename without extension.
 * @param array  $templates An optional list of template candidates
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    $template = locate_template($templates);
    /**
     * Filters the path of the queried template by type.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * This hook also applies to various types of files loaded as part of the Template Hierarchy.
     *
     * Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date',
     * 'home', 'front_page', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
     *
     * @since 1.5.0
     *
     * @param string $template Path to the template. See locate_template().
     */
    return apply_filters("{$type}_template", $template);
}

WordPress Version: 4.4

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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.
 *
 * @since 1.5.0
 *
 * @param string $type      Filename without extension.
 * @param array  $templates An optional list of template candidates
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    $template = locate_template($templates);
    /**
     * Filter the path of the queried template by type.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * This hook also applies to various types of files loaded as part of the Template Hierarchy.
     *
     * Possible values for `$type` include: 'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date',
     * 'home', 'front_page', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
     *
     * @since 1.5.0
     *
     * @param string $template Path to the template. See locate_template().
     */
    return apply_filters("{$type}_template", $template);
}

WordPress Version: 4.3

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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.
 *
 * @since 1.5.0
 *
 * @param string $type      Filename without extension.
 * @param array  $templates An optional list of template candidates
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    $template = locate_template($templates);
    /**
     * Filter the path of the queried template by type.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
     * extension and any non-alphanumeric characters delimiting words -- of the file to load.
     * This hook also applies to various types of files loaded as part of the Template Hierarchy.
     *
     * @since 1.5.0
     *
     * @param string $template Path to the template. See locate_template().
     */
    return apply_filters("{$type}_template", $template);
}

WordPress Version: 4.1

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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.
 *
 * @since 1.5.0
 *
 * @param string $type Filename without extension.
 * @param array $templates An optional list of template candidates
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    $template = locate_template($templates);
    /**
     * Filter the path of the queried template by type.
     *
     * The dynamic portion of the hook name, `$type`, refers to the filename
     * -- minus the extension -- of the file to load. This hook also applies
     * to various types of files loaded as part of the Template Hierarchy.
     *
     * @since 1.5.0
     *
     * @param string $template Path to the template. See {@see locate_template()}.
     */
    return apply_filters("{$type}_template", $template);
}

WordPress Version: 3.9

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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.
 *
 * @since 1.5.0
 *
 * @param string $type Filename without extension.
 * @param array $templates An optional list of template candidates
 * @return string Full path to template file.
 */
function get_query_template($type, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    $template = locate_template($templates);
    /**
     * Filter the path of the queried template by type.
     *
     * The dynamic portion of the hook name, $type, refers to the filename
     * -- minus the extension -- of the file to load. This hook also applies
     * to various types of files loaded as part of the Template Hierarchy.
     *
     * @since 1.5.0
     *
     * @param string $template Path to the template. @see locate_template()
     */
    return apply_filters("{$type}_template", $template);
}

WordPress Version: 3.8

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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.
 *
 * @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, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    $template = locate_template($templates);
    /**
     * Filter the path of the queried template by type.
     *
     * The dynamic portion of the hook name, $type, refers to the filename
     * -- minus the extension -- of the file to load. This hook also applies
     * to various types of files loaded as part of the Template Hierarchy.
     *
     * @since 1.5.0
     *
     * @param string $template Path to the template. @see locate_template()
     */
    return apply_filters("{$type}_template", $template);
}

WordPress Version: 3.7

/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */
/**
 * Retrieve path to a template
 *
 * 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.
 *
 * @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, $templates = array())
{
    $type = preg_replace('|[^a-z0-9-]+|', '', $type);
    if (empty($templates)) {
        $templates = array("{$type}.php");
    }
    $template = locate_template($templates);
    /**
     * Filter the path of the queried template by type.
     *
     * The dynamic portion of the hook name, $type, refers to the filename
     * -- minus the extension -- of the file to load. This hook also applies
     * to various types of files loaded as part of the Template Hierarchy.
     *
     * @since 1.5.2
     *
     * @param string $template Path to the template. @see locate_template()
     */
    return apply_filters("{$type}_template", $template);
}