Post Types API

Framework for registering and managing WordPress post types.

Since: 2.9.0
Source: wp-includes/post.php, wp-includes/class-wp-post-type.php

Components

ComponentDescription
functions.mdCore registration and retrieval functions
class-wp-post-type.mdPost type object (since 4.6.0)
hooks.mdActions and filters

Registration Flow

php
init
    └── register_post_type()
            └── new WP_Post_Type()
                    ├── set_props()
                    ├── add_supports()
                    ├── add_rewrite_rules()
                    ├── register_meta_boxes()
                    ├── add_hooks()
                    └── register_taxonomies()
            └── do_action('registered_post_type')
            └── do_action('registered_post_type_{$post_type}')

Unregistration Flow

unregister_post_type()
    └── WP_Post_Type
            ├── remove_supports()
            ├── remove_rewrite_rules()
            ├── unregister_meta_boxes()
            ├── remove_hooks()
            └── unregister_taxonomies()
    └── do_action('unregistered_post_type')

Built-in Post Types

Post TypeDescription
postStandard blog posts
pageStatic pages (hierarchical)
attachmentMedia library items
revisionPost revisions
nav_menu_itemNavigation menu items
custom_cssCustom CSS (Customizer)
customize_changesetCustomizer changesets
oembed_cacheoEmbed response cache
user_requestPrivacy/data requests
wp_blockReusable blocks (patterns)
wp_templateBlock templates
wp_template_partBlock template parts
wp_global_stylesGlobal styles
wp_navigationNavigation menus
wp_font_familyFont families
wp_font_faceFont faces

Quick Example

php
add_action( 'init', function() {
    register_post_type( 'book', array(
        'label'              => __( 'Books' ),
        'public'             => true,
        'show_in_rest'       => true,
        'supports'           => array( 'title', 'editor', 'thumbnail' ),
        'has_archive'        => true,
        'rewrite'            => array( 'slug' => 'books' ),
        'menu_icon'          => 'dashicons-book',
    ) );
} );