I have an unusual situation where I need to make the built-in post type ‘page’ non-hierarchical.
I printed the post type object with var_dump(get_post_type_object('page')); die;
and I got this:
object(stdClass)#164 (26) {
["labels"]=>
...
}
["description"]=>
string(0) ""
["publicly_queryable"]=>
bool(false)
["exclude_from_search"]=>
bool(false)
["capability_type"]=>
string(4) "page"
["map_meta_cap"]=>
bool(true)
["_builtin"]=>
bool(true)
["_edit_link"]=>
string(16) "post.php?post=%d"
["hierarchical"]=>
bool(true)
....
}
How might I go about modifying the post-type object so that ["hierarchical"]=>bool(false)
?
This is a pretty late answer, but I was looking to do something similar and figured it out. I wanted to get nav_menu_items into an RSS feed, which required changing the built in nav_menu_item post type property publicly_queryable.
Anyway, it was actually pretty simple, here’s a generic function to do it:
And that’s it. I’ve got it in a plugin. If you want to see the list of available properties to change, throw in
to get a nicely formatted output of all the properties.
In your case you’d use
Hope that helps someone!
What about:
As far as I can tell, there is no (good) way to change the core post types. The alternative of course is to make your own custom post type. If you have a bunch of posts that are the core post type of page, you could run a MySQL query to convert them all at once to the new post type, once created, if you need to. Or, you could possibly change the way your theme displays a list of pages.
To make a new post type that is not hierarchical: