Just as it says, have a custom post type with parent/child posts, I want a different template for the parents than the children.
Hi Daniel,
The WordPress template hierarchy does not provide for this scenario:
With a little effort, you could write a function that checks whether the post you are currently in is a parent or child post and then work with conditions within your template to display layout A or B.
Something like this should do (generated by ChatGPT):
function is_parent_or_child_post() {
global $post;
// Check if the post has ancestors
$ancestors = get_post_ancestors($post);
// If the post has ancestors, it's a child post
if (!empty($ancestors)) {
return 'child';
} else {
// If the post has no ancestors, it's a parent post
return 'parent';
}
}
Then you can compare against parent or child:
Thanks for jumping in.
Familiar with the content strucutres/template hierarchies. And yes this will require conditionals in the template selection process, just not sure how to get them there. Not afraid to code it (10+ years plugin dev).
Are you showing using that for block conditions?
Otherwise I don’t have options to use custom functions as conditions for Template Settings → Conditions, I only get content type options.
Is it possible to extend that with custom or even develop additional rule types with hooks/filters?
Hey, hope I understand you correctly.
This is what I’ve done on my bricks Electrician site.
I have a custom post type with a parent, then nested children.
Parent is a sign-up page, then child page is the “thank-you” page (nested under the parent).
I used one section, and two containers for a simple layout.
I then use {echo:has_post_parent()} == 1 (or 0)
If the post has a parent, it’s a child (1).
Hope that is what you’re looking for. Works very well to simply create 1 template for that post type.
has_post_parent() is a wordpress function. I try to stick as close to WordPress as possible
Ahh so your using a single template for both and changing contents.
Not quite what I was after as both pages are using different layouts entirely. Will keep that in mind though.
What we ended up doing for now is switching from Hierarchial structure to flat, and added a category taxonomy.
Then changed the rewrite rules to use the category slug in the post url like posts/categories.
So now instead of /features/parent-feature/child-feature
, we have /features/feature-category/feature-page
.
Requires custom rewrite rules as well as filtering post url generation but pretty simple.
Also allows us to create dedicated template for each (cat/ post type)…
Yes, I found that easiest… just 1 template to manage instead of 2.
It can be done on a <section>
level or just the <div class="brxe-container">
(the option I did).
If it’s a parent, show parent container…
If child, show child container…
Parent page is form sign-up
Child page is thank-you
Any clue on how to show a template on Child Terms? For example FAQ (Parent) → Website questions (Child), but the Post has only “Website questions” ticked as category and not the parent.
@Webrats There really need to be a few additional conditional rules to support these different scenarios.
They would be rather simple to create, but I’m not sure how to do it from a filter/hook, so we may have to wait for them to do it themselves.
If anybody knows how to register custom rules I’ll write them.