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:
function change_wp_object() {
$object = get_post_type_object('post_type');
$object->property = true;
}
add_action('init','change_wp_object');
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
echo '<pre>'.print_r($object, 1).'</pre>';
to get a nicely formatted output of all the properties.
In your case you’d use
$object-> hierarchical = false;
Hope that helps someone!