Index: src/wp-includes/template.php
===================================================================
--- src/wp-includes/template.php	(revision 35256)
+++ src/wp-includes/template.php	(working copy)
@@ -26,6 +26,20 @@
 	if ( empty( $templates ) )
 		$templates = array("{$type}.php");
 
+	/**
+	 * Filter the list of templates that should be passed to locate_template().
+	 *
+	 * 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',
+	 * 'home', 'front_page', 'page', 'paged', 'search', 'single', 'singular', and 'attachment'.
+	 *
+	 * @since 4.4.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 );
 
 	/**
@@ -35,6 +49,9 @@
 	 * 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().
