#22314 closed enhancement (fixed)
Add singular.php to template hierarchy
Reported by: |
|
Owned by: |
|
---|---|---|---|
Milestone: | 4.3 | Priority: | normal |
Severity: | normal | Version: | 3.4.2 |
Component: | Themes | Keywords: | has-patch needs-codex needs-testing needs-refresh 2nd-opinion |
Focuses: | template | Cc: |
Description
Currently, the template hierarchy includes a fallback template (archive.php) for all archive-index type pages (date, tag, category, taxonomy, author, blog posts index, custom post type index), but does not include an analogous fallback template for single-post type pages (blog post, page, attachment, custom post type). This patch adds singular.php
to act as such fallback.
This change also ensures that all template context conditionals have associated template files. AFAIK, is_singular()
is currently the only template context conditional that does not have such a corresponding template file.
Attachments (2)
Change History (26)
#2
follow-up:
↓ 4
@
12 years ago
A few questions ...
Is this meant to be a generic template for all single views essentially providing a merged single
and page
template, rather than falling directly back to index
?
Although it would add a consistency to the template hierarchy, and possibly reduce a theme's payload by one (duplicated) file, what are the benefits to adding this template?
Would there be a similar benefit to having page
fallback to single
(or vice versa) instead?
#4
in reply to:
↑ 2
;
follow-up:
↓ 5
@
12 years ago
Replying to cais:
A few questions ...
Is this meant to be a generic template for all single views essentially providing a merged
single
andpage
template, rather than falling directly back toindex
?
Although it would add a consistency to the template hierarchy, and possibly reduce a theme's payload by one (duplicated) file, what are the benefits to adding this template?
I think the consistency is the benefit, in large part. Also, to me, it makes sense to have (the option to have) one template for outputting an index of posts, and one template for outputting a single post.
Would there be a similar benefit to having
page
fallback tosingle
(or vice versa) instead?
Not really, IMHO; at least, no moreso than it would make sense to have category.php fallback to tag.php.
#5
in reply to:
↑ 4
;
follow-up:
↓ 6
@
12 years ago
Replying to chipbennett:
I think the consistency is the benefit, in large part. Also, to me, it makes sense to have (the option to have) one template for outputting an index of posts, and one template for outputting a single post.
Does not the single
template serve to display a single post? I am not inherently against the idea of adding another template; this discussion is meant more as a consideration of the current template choice logic and if it should be adjusted to take into account what you are suggesting your proposed singular
template accomplish.
#6
in reply to:
↑ 5
@
12 years ago
Replying to cais:
Replying to chipbennett:
I think the consistency is the benefit, in large part. Also, to me, it makes sense to have (the option to have) one template for outputting an index of posts, and one template for outputting a single post.
Does not the
single
template serve to display a single post?
Not for all post types, whereas the archive-index pages for all posts types will fallback to archive.php
. The exception for single-post pages is the page
post-type, which falls back directly to index.php
. All the rest - post
, attachment
, and custom post types - fall back to single.php
, then to index.php
.
The analogy would be something like having author.php
fallback directly to index.php
, while all other index-archive type pages falling back to archive.php
.
I am not inherently against the idea of adding another template; this discussion is meant more as a consideration of the current template choice logic and if it should be adjusted to take into account what you are suggesting your proposed
singular
template accomplish.
No worries. I'm just throwing the idea out there. If it gets implemented, then great. If not, then at least the reasoning will be documented here, should anyone ask about the (minor) inconsistency in the future.
#7
follow-up:
↓ 8
@
12 years ago
- Cc info@… added
There is a typo in get_singlular_template()
. Should be get_singular_template()
.
#8
in reply to:
↑ 7
@
12 years ago
Replying to toscho:
There is a typo in
get_singlular_template()
. Should beget_singular_template()
.
Aaargh. Fixed.
#11
@
11 years ago
This addition seems to make a lot of sense and would parallel is_single()
, is_page()
and is_singular()
.
#12
@
11 years ago
+1
is_singular() is currently the only template context conditional that does not have such a corresponding template file.
This seems a very natural addition to the template hierarchy. This means one can make a common template for all singular content and keep index.php more dedicated to showing multiple content. singular.php has become a "missing link" and it has to do with the introduction of custom post types, a special front page and an alternative "blog" page (posts index), and finally with the introduction of is_singular()
.
When making a child theme for a (multi) site with (usually, a common theme and) many custom post types I want to keep the templates collection as simple as possible. First I create special templates for CPT archives, tax archives and single CPTs with custom metadata. Other, more plain content, like posts, pages, other CPTs in singular form should be able to share a template file, sometimes with simple conditionals for the display, or not, of standard metadata (author, date etc).
#13
@
10 years ago
- Keywords needs-refresh added
- Milestone changed from Awaiting Review to 4.3
@since Docs need an update. Along with that, it would be nice for the patch to be created from the root and not the wp-includes directory.
I like this idea. Has the potential to make some themes simpler.
#14
follow-ups:
↓ 15
↓ 20
@
10 years ago
- Keywords 2nd-opinion added
I'm not too enthused by this. For all post types apart from Pages, singular.php is functionally identical to single.php (ie. it provides no more granular control, unlike the rest of the hierarchy). It's too narrow a use case to warrant introducing a new file into the template hierarchy.
If you want Pages to use the same template as other post types, you can do this by putting include 'single.php';
into page.php
.
The added template hierarchy complexity of introducing singular.php
outweighs its small benefit.
#15
in reply to:
↑ 14
@
10 years ago
Replying to johnbillion:
The added template hierarchy complexity of introducing
singular.php
outweighs its small benefit.
I'm not sure I agree with it making the template hierarchy more complex. You could also argue it makes it simpler, since the template tag has a corresponding template now, completing the hierarchy and not confronting theme authors with the special case of it missing.
I'm not too enthused by this. For all post types apart from Pages, singular.php is functionally identical to single.php (ie. it provides no more granular control, unlike the rest of the hierarchy). It's too narrow a use case to warrant introducing a new file into the template hierarchy.
I agree, in most cases you'd probably still end up with at least two templates, singular.php
and a more specialized template for either pages or single post, just because they are so different in their requirements. But it would certainly help themes to provide a default template for hierarchical custom post types.
If you want Pages to use the same template as other post types, you can do this by putting
include 'single.php';
intopage.php
.
That's the reason we have so many templating possibilities in the first place, to avoid doing that. Working on Twenty Thirteen there was a big discussion about whether it should ship with an archive.php
with a lot of conditionals or more specific templates for tags, categories, etc. The reasoning was the same, let's use the appropriate template, that's why we have that hierarchy in the first place.
#16
@
10 years ago
I also like the idea of having one singular fallback template to match the common archive fallback template. It will be a minor change to theme building, but it will promote consistency, always a good thing.
This ticket was mentioned in Slack in #themereview by chipbennett. View the logs.
10 years ago
This ticket was mentioned in Slack in #themereview by chipbennett. View the logs.
10 years ago
#20
in reply to:
↑ 14
@
10 years ago
Replying to johnbillion:
I'm not too enthused by this. For all post types apart from Pages, singular.php is functionally identical to single.php (ie. it provides no more granular control, unlike the rest of the hierarchy). It's too narrow a use case to warrant introducing a new file into the template hierarchy.
I don't think it's too narrow. I think it's the natural progression that should have been done a long time ago.
If you want Pages to use the same template as other post types, you can do this by putting
include 'single.php';
intopage.php
.
The added template hierarchy complexity of introducing
singular.php
outweighs its small benefit.
I think it actually reduces complexity since developers will no longer need to remember that this is the one template tag that doesn't match the conditionals.
Adds support for singular.php template file