Make WordPress Core

Ticket #14310: template_hierarchy.2.diff

File template_hierarchy.2.diff, 4.4 KB (added by scribu, 14 years ago)

refresh

  • wp-includes/theme.php

     
    687687}
    688688
    689689/**
    690  * Retrieve path to file without the use of extension.
     690 * Retrieve path to a template
    691691 *
    692  * Used to quickly retrieve the path of file without including the file
    693  * extension. It will also check the parent template, if the file exists, with
    694  * the use of {@link locate_template()}. Allows for more generic file location
     692 * Used to quickly retrieve the path of a template without including the file
     693 * extension. It will also check the parent theme, if the file exists, with
     694 * the use of {@link locate_template()}. Allows for more generic template location
    695695 * without the use of the other get_*_template() functions.
    696696 *
    697  * Can be used with include() or require() to retrieve path.
    698  * <code>
    699  * if( '' != get_query_template( '404' ) )
    700  *     include( get_query_template( '404' ) );
    701  * </code>
    702  * or the same can be accomplished with
    703  * <code>
    704  * if( '' != get_404_template() )
    705  *     include( get_404_template() );
    706  * </code>
    707  *
    708697 * @since 1.5.0
    709698 *
    710699 * @param string $type Filename without extension.
     700 * @param array $templates An optional list of template candidates
    711701 * @return string Full path to file.
    712702 */
    713 function get_query_template($type) {
     703function get_query_template( $type, $templates = array() ) {
    714704        $type = preg_replace( '|[^a-z0-9-]+|', '', $type );
    715         return apply_filters("{$type}_template", locate_template(array("{$type}.php")));
     705
     706        if ( empty( $templates ) )
     707                $templates = array("{$type}.php");
     708
     709        $templates = apply_filters( "{$type}_template_hierarchy", $templates );
     710
     711        return apply_filters( "{$type}_template", locate_template( $templates ) );
    716712}
    717713
    718714/**
     
    768764                $templates[] = "author-{$author_id}.php";
    769765        $templates[] = 'author.php';
    770766
    771         $template = locate_template( $templates );
    772         return apply_filters( 'author_template', $template );
     767        return get_query_template( 'author', $templates );
    773768}
    774769
    775770/**
     
    790785
    791786        $templates = array();
    792787
    793         if ( !is_wp_error($category) )
     788        if ( !is_wp_error( $category ) )
    794789                $templates[] = "category-{$category->slug}.php";
    795790
    796791        $templates[] = "category-$cat_ID.php";
    797792        $templates[] = "category.php";
    798793
    799         $template = locate_template($templates);
    800         return apply_filters('category_template', $template);
     794        return get_query_template( 'category', $templates );
    801795}
    802796
    803797/**
     
    824818                $templates[] = "tag-$tag_id.php";
    825819        $templates[] = "tag.php";
    826820
    827         $template = locate_template($templates);
    828         return apply_filters('tag_template', $template);
     821        return get_query_template( 'tag', $templates );
    829822}
    830823
    831824/**
     
    857850
    858851        $templates[] = "taxonomy.php";
    859852
    860         $template = locate_template($templates);
    861         return apply_filters('taxonomy_template', $template);
     853        return get_query_template( 'taxonomy', $templates );
    862854}
    863855
    864856/**
     
    885877 * @return string
    886878 */
    887879function get_home_template() {
    888         $template = locate_template(array('home.php', 'index.php'));
    889         return apply_filters('home_template', $template);
     880        $templates = array( 'home.php', 'index.php' );
     881
     882        return get_query_template( 'home', $templates );
    890883}
    891884
    892885/**
     
    900893 * @return string
    901894 */
    902895function get_front_page_template() {
    903         return apply_filters( 'front_page_template', locate_template( array('front-page.php') ) );
     896        $templates = array('front-page.php');
     897
     898        return get_query_template( 'front_page', $templates );
    904899}
    905900
    906901/**
     
    939934                $templates[] = "page-$id.php";
    940935        $templates[] = "page.php";
    941936
    942         return apply_filters('page_template', locate_template($templates));
     937        return get_query_template( 'page', $templates );
    943938}
    944939
    945940/**
     
    976971
    977972        $object = $wp_query->get_queried_object();
    978973        $templates = array('single-' . $object->post_type . '.php', 'single.php');
    979         return apply_filters('single_template', locate_template($templates));
     974
     975        return get_query_template( 'single', $templates );
    980976}
    981977
    982978/**
     
    10191015 * @return string
    10201016 */
    10211017function get_comments_popup_template() {
    1022         $template = locate_template(array("comments-popup.php"));
     1018        $template = get_query_template( 'comments_popup', array( 'comments-popup.php' ) );
    10231019
    10241020        // Backward compat code will be removed in a future release
    10251021        if ('' == $template)
    10261022                $template = ABSPATH . WPINC . '/theme-compat/comments-popup.php';
    10271023
    1028         return apply_filters('comments_popup_template', $template);
     1024        return $template;
    10291025}
    10301026
    10311027/**