Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

Are posts supposed to have parents? If so, what would that mean for a post to have a parent?

Also, if there are some constraints to posts having parents, then where is that enforced? Not in the DB as I see it.

share|improve this question
add comment

3 Answers

up vote 3 down vote accepted

Out of the box, no, posts can't have parents. They can be assigned to categories, which can be organised hierarchically. Pages, however, can have parents and you can build a menu structure out of them by using that feature.

As to where this is enforced: The parent of a post is stored in the column "post_parent" in "wp_posts". It's not really enforced as such, just the default UI doesn't give you an option to set it and default WP coding doesn't use that value for Posts. It wouldn't be too difficult to create a custom post type to have posts with parents though.

share|improve this answer
    
Also note that media attachments make use of the post_parent column, to identify which page/post (including custom post types) that they are attached to. –  David Gard Apr 2 at 11:40
add comment

I know this is an old post. However none of these answers are correct, and I wanted to post the solution I used to solve this problem. The best way to set a parent page through all of your posts is through the (Appearance -> Customize) menu. You can set a static page for your home page or posts page. When you set a static post page, that page will be the parent for every individual blog post.

share|improve this answer
1  
That's not a parent page - it's a template containing an archive of posts. Setting that up doesn't make posts hierarchical. –  kaiser Apr 2 at 11:24
    
How is that not a parent page? It's a static page (which by the way does not have to be an archive, whatever page template you assign to that static page, can have whatever you want), and when this is set up your urls follow that hierarchy, as well as Breadcrumbs on the site. It's a 1 minute fix that allows you to assign a static page as the post parent. His question mentions NOTHING about it being hierarchical in the first place. Perhaps you could enlighten me on how this solution would be bad practice? –  LateToTheParty Apr 6 at 15:11
    
"Are posts supposed to have parent" is the same thing as "Are posts hierarchical". A template can contain everything, but the plain fact that it contains a loop that returns and displays an archive loop does not (a) make the page its parent (it's just the place where the loop happens to be) and (b) does not make the built in post type "post" hierarchical or in other words, does not assign a parent. But yes, you can summon posts in a loop by specific criteria (like a shared child-category). –  kaiser Apr 6 at 16:19
    
Don't get thrown off by criticism or clarification of your question or answer. This place is something where this actually needs to happen all the time to make the best answers succeed and serve as wiki/library place where one can go and instantly figure out how to do something or get as much possible insights on how something works. We even encourage people (like you) to comment on other answers as well. Keep in mind that I nowhere mentioned that your answer is bad practice. It's true in a lot of ways, just the statement that it makes the post type hierarchical isn't. –  kaiser Apr 6 at 16:21
add comment

Wp has built in "Pages" (hierarchical, parents allowed) and "Posts" (non-hierarchical). There are also other post types, but let's leave that away.

If the Q results in:

Can I have hierarchical posts?

Then the answer is Yes,… you can have "posts" that are hierarchical. But as they are not built in, you'll have to register your own Custom Post Type - see Arguments » hierarchical.

Such "Posts" (or articles, whatever, …) will then - in case they have a parent post - have set the parent ID inside their object. So in a loop you could do the following:

if ( have_posts ) : 
// etc.

global $post;
// call parent: http://codex.wordpress.org/Function_Reference/get_post
$parent = get_post( $post->post_parent );

echo "<h2>{$post->post_title} is a child of {$parent->post_title}";

// etc.
endif;
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.