Can posts have parents?

The question:

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.

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

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.

Method 2

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 )
{
    the_post();
    // 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;

Method 3

From a search engine perspective, two of these answers combined will help Google to track the hierarchy of your posts, as well as users of course.

  1. Add a page and use it to host your posts.
    “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.”

  2. Change the permalink structure to /blog/%postname% as mentioned above.
    “Suppose you want to append blog before post in url than make sure that your blog page’s slug name is blog .

Then go to WP-admin-panel > settings > permalink and choose the last option “custom structure” and add following in it:

/blog/%postname%/

and save changes. It will be only applied to your blog page, other page will not display blog as parent.”

This way, Google sees the hierarchy in sitemaps as domain.com/page/post (in that order) and will also find the content in the same place. As will users. Job done.

Method 4

Suppose you want to append blog before post in url than make sure that your blog page’s slug name is blog .

Then go to WP-admin-panel > settings > permalink and choose the last option “custom structure” and add following in it:

/blog/%postname%/

and save changes.

It will be only applied to your blog page, other page will not display blog as parent.

Method 5

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.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment