[wp-hackers] front-page.php always overrides home.php?

Chip Bennett chip at chipbennett.net
Fri Nov 19 20:44:47 UTC 2010


To follow up, here's what I'm thinking of submitting as a patch:

Replace is_home() with is_posts_index() - or is_posts() or is_blog_index()
or is_blog()
Replace home.php with posts.php - or posts-index.php or blog.php

Reasoning:

is_home() currently returns true under inconsistent circumstances (if Blog
posts are displayed other than on the front/home page), while
is_front_page() covers the relevant condition (both "posts" and "static
page", when on the front page). Thus, the only *unique* condition for which
is_home() returns true would be better named to reflect the true condition:
the blog/posts index, NOT "home" (i.e. the front page).

if both "front-page.php" and "home.php" exist, then for the only
circumstance in which "home.php" will ever be used is NOT on the home page.
Thus, the template file name should be changed to reflect the true
condition: the blog/posts index, NOT "home" (i.e. the front page).

So, two questions:

1) Is this reasonable to mark up as a patch and submit a Trac ticket, or is
it a waste of time?

2) Any preferences on the nomenclature? To me, "posts" and "blog" are
interchangeable; so I don't have a preference. My only thought is that using
"posts" would be more consistent with the similar use of "page" in Theme
template file nomenclature.

Chip

On Fri, Nov 19, 2010 at 2:27 PM, Chip Bennett <chip at chipbennett.net> wrote:

> Thanks, Chris.
>
> But, does that make sense?
>
> If a Theme includes both template files "front-page.php" and "home.php",
> the Blog index will display differently, depending on user settings:
>
> If Blog (i.e. "posts") is set to display on the front page, then the Blog
> index will use "front-page.php"; however, if the front page is set to
> display a static Page, and the Blog set to display on a non-front Page, then
> the Blog index will use "home.php".
>
> That seems inconsistent (and confusing) to me:
>
> 1) Blog display will be different depending on location setting, rather
> than by content type (Page vs Post)
> 2) "*home*.php" is potentially used for a non-home page.
> 3) "front-*page*.php" is used for both Pages and Posts.
>
> I've not poked around Trac yet; does anyone know if any related tickets
> have been opened? I think some of this needs some cleaning-up.
>
> Chip
>
> On Fri, Nov 19, 2010 at 2:20 PM, Chris Gossmann <chris at wupperpiraten.de>wrote:
>
>> 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
>>
>> _______________________________________________
>> 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