OK, so the function get_post_types
is exactly what you’re looking for.
$args = array(
'public' => true,
'_builtin' => false
);
$output="names"; // names or objects, note names is the default
$operator="and"; // 'and' or 'or'
$post_types = get_post_types( $args, $output, $operator );
foreach ( $post_types as $post_type ) {
echo '<p>' . $post_type . '</p>';
}
But there are few things you should be careful about:
- You can’t get these post types too soon. It’s very common practice to register the post types on
init
hook, so you won’t get these post types before that hook is fired up. - If you’ll query for public post types, you’ll get only the post types that are registered as public (and not that are public based on other args)…
- By default this function will return you only names of post types. If you want to obtain more info, you can pass
objects
as second param.