get_post_type_object( string $post_type ): WP_Post_Type|null

Retrieves a post type object by name.

Description

See also

Parameters

$post_typestringrequired
The name of a registered post type.

Return

WP_Post_Type|null WP_Post_Type object if it exists, null otherwise.

Source

function get_post_type_object( $post_type ) {
	global $wp_post_types;

	if ( ! is_scalar( $post_type ) || empty( $wp_post_types[ $post_type ] ) ) {
		return null;
	}

	return $wp_post_types[ $post_type ];
}

Changelog

VersionDescription
4.6.0Object returned is now an instance of WP_Post_Type.
3.0.0Introduced.

User Contributed Notes

  1. Skip to note 3 content

    Examples

    $obj = get_post_type_object( 'post' );
    echo $obj->labels->singular_name;

    Technically, this is the same as

    global $wp_post_types;
    $obj = $wp_post_types['post'];
    echo $obj->labels->singular_name; 

    print_r( $obj ) might return something like this:

    stdClass Object
    (
    	[labels] => stdClass Object
    		(
    			[name] => Posts
    			[singular_name] => Post
    			[add_new] => Add New
    			[add_new_item] => Add New Post
    			[edit_item] => Edit Post
    			[new_item] => New Post
    			[view_item] => View Post
    			[search_items] => Search Posts
    			[not_found] => No posts found
    			[not_found_in_trash] => No posts found in Trash
    			[parent_item_colon] => 
    		)
    	[description] => 
    	[publicly_queryable] => 1
    	[exclude_from_search] => 
    	[_builtin] => 1
    	[_edit_link] => post.php?post=%d
    	[capability_type] => post
    	[hierarchical] => 
    	[public] => 1
    	[rewrite] => 
    	[query_var] => 
    	[register_meta_box_cb] => 
    	[taxonomies] => Array
    		(
    		)
    	[show_ui] => 1
    	[menu_position] => 
    	[menu_icon] => 
    	[permalink_epmask] => 1
    	[can_export] => 1
    	[show_in_nav_menus] => 1
    	[name] => post
    	[cap] => stdClass Object
    		(
    			[edit_post] => edit_post
    			[edit_posts] => edit_posts
    			[edit_others_posts] => edit_others_posts
    			[publish_posts] => publish_posts
    			[read_post] => read_post
    			[read_private_posts] => read_private_posts
    			[delete_post] => delete_post
    		)
    	[label] => Posts
    )

    Assuming we have the post type ‘certification’, we could do this:

    $obj = get_post_type_object( 'certification' );

    print_r( $obj ) might return something like this:

    stdClass Object
    (
    	[labels] => stdClass Object
    		(
    			[name] => Certification
    			[singular_name] => Certification
    			[add_new] => Add New
    			[add_new_item] => Add New Certification
    			[edit_item] => Edit Certification
    			[new_item] => New Page
    			[view_item] => View Certification
    			[search_items] => Search Certification
    			[not_found] => Not found
    			[not_found_in_trash] => Not found in Trash
    			[parent_item_colon] => Parent Certification:
    			[all_items] => All Certifications
    			[menu_name] => Certifications
    			[update_item] => Update Certification
    			[name_admin_bar] => Certification
    		)
    	[description] => Certifications
    	[public] => 1
    	[hierarchical] => 1
    	[exclude_from_search] => 
    	[publicly_queryable] => 1
    	[show_ui] => 1
    	[show_in_menu] => 
    	[show_in_nav_menus] => 1
    	[show_in_admin_bar] => 1
    	[menu_position] => 5
    	[menu_icon] => dashicons-welcome-widgets-menus
    	[capability_type] => post
    	[map_meta_cap] => 1
    	[register_meta_box_cb] => 
    	[taxonomies] => Array
    		(
    			[0] => objective
    		)
    	[has_archive] => 1
    	[rewrite] => Array
    		(
    			[slug] => certification
    			[with_front] => 1
    			[pages] => 1
    			[feeds] => 1
    			[ep_mask] => 1
    		)
    	[query_var] => certification
    	[can_export] => 1
    	[delete_with_user] => 
    	[_builtin] => 
    	[_edit_link] => post.php?post=%d
    	[label] => Certification
    	[name] => certification
    	[cap] => stdClass Object
    		(
    			[edit_post] => edit_post
    			[read_post] => read_post
    			[delete_post] => delete_post
    			[edit_posts] => edit_posts
    			[edit_others_posts] => edit_others_posts
    			[publish_posts] => publish_posts
    			[read_private_posts] => read_private_posts
    			[read] => read
    			[delete_posts] => delete_posts
    			[delete_private_posts] => delete_private_posts
    			[delete_published_posts] => delete_published_posts
    			[delete_others_posts] => delete_others_posts
    			[edit_private_posts] => edit_private_posts
    			[edit_published_posts] => edit_published_posts
    			[create_posts] => edit_posts
    		)
    )

    Note that the object’s attribute names are slightly different than the arguments expected for the register_post_type() function.

  2. Skip to note 4 content

    Examples

    Retreive the slug

    $current_queried_post_type_slug = get_post_type_object( get_post_type() )->rewrite['slug'];

    display the slug:

    echo $current_queried_post_type_slug;

    Build the URL for the post_type:

    echo home_url( '/'. $current_queried_post_type_slug . '/' );

You must log in before being able to contribute a note or feedback.