[wp-hackers] front-page.php always overrides home.php?
Chris Gossmann
chris at wupperpiraten.de
Fri Nov 19 20:20:10 UTC 2010
Hi Chip,
this is the correct behavior.
Front-page is always the front page / first page, whereas home could be your
home / first page or whatever you defined to show your regular posts.
Therefore front-page.php will override home.php.
Chris
> -----Ursprüngliche Nachricht-----
> Von: wp-hackers-bounces at lists.automattic.com [mailto:wp-hackers-
> bounces at lists.automattic.com] Im Auftrag von Chip Bennett
> Gesendet: Freitag, 19. November 2010 20:38
> An: wp-hackers at lists.automattic.com
> Betreff: [wp-hackers] front-page.php always overrides home.php?
>
> All,
>
> If a Theme defines both a "home.php" template file (for a custom "home"
> page
> displaying Posts) and a "front-page.php" template file (for a custom
> "home"
> page displaying a static Page), it appears that "front-page.php" will
> always
> take precedence over "home.php":
>
> Here's the definition of
> is_front_page()<http://core.trac.wordpress.org/browser/tags/3.0.1/wp-
> includes/query.php#L353>
> :
>
> 344 /**
> 345 * Whether current page query is the front of the site.
> 346 *
> 347 * @since 2.5.0
> 348 * @uses is_home()
> 349 * @uses get_option()
> 350 *
> 351 * @return bool True, if front of site.
> 352 */
> 353 function is_front_page() {
> 354 // most likely case
> *355 if ( 'posts' == get_option('show_on_front') && is_home()
> )*
> 356 return true;
> 357 elseif ( 'page' == get_option('show_on_front') &&
> get_option('page_on_front') && is_page(get_option('page_on_front')) )
> 358 return true;
> 359 else
> 360 return false;
> 361 }
>
> And then here's the relevant code from the template
> loader<http://core.trac.wordpress.org/browser/trunk/wp-
> includes/template-loader.php#L21>
> :
>
> 21 if ( defined('WP_USE_THEMES') && WP_USE_THEMES ) :
> 22 $template = false;
> 23 if ( is_404() && $template =
> get_404_template()
> ) :
> 24 elseif ( is_search() && $template =
> get_search_template()
> ) :
> 25 elseif ( is_tax() && $template =
> get_taxonomy_template() ) :
> *26 elseif ( is_front_page() && $template =
> get_front_page_template() ) :*
> *27 elseif ( is_home() && $template =
> get_home_template()
> ) :*
> 28 elseif ( is_attachment() && $template =
> get_attachment_template() ) :
> 29 remove_filter('the_content', 'prepend_attachment');
> 30 elseif ( is_single() && $template =
> get_single_template()
> ) :
> 31 elseif ( is_page() && $template =
> get_page_template()
> ) :
> 32 elseif ( is_category() && $template =
> get_category_template() ) :
> 33 elseif ( is_tag() && $template =
> get_tag_template()
> ) :
> 34 elseif ( is_author() && $template =
> get_author_template()
> ) :
> 35 elseif ( is_date() && $template =
> get_date_template()
> ) :
> 36 elseif ( is_archive() && $template =
> get_archive_template() ) :
> 37 elseif ( is_comments_popup() && $template =
> get_comments_popup_template() ) :
> 38 elseif ( is_paged() && $template =
> get_paged_template()
> ) :
> 39 else :
> 40 $template = get_index_template();
> 41 endif;
> 42 if ( $template = apply_filters( 'template_include',
> $template ) )
> 43 include( $template );
> 44 return;
> 45 endif;
>
> Is this the intended behavior? If so, it would seem to make the use of
> "home.php" obsolete, since "front-page.php" covers both use cases.
>
> (And sorry for the incredibly belated question. I know that "front-
> page.php"
> has been around for a year. I've just never actually *used* it, so
> wasn't
> aware of how it was defined/used by the template loader.)
>
> Chip
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
More information about the wp-hackers
mailing list