Function and usage of register_post_type() in wordpress


Answers ( 1 )


    The register_post_type() function in WordPress is crucial for creating custom post types, allowing for more diverse content management beyond the default posts and pages. Here's a detailed explanation and sample usage:


    register_post_type( string $post_type, array|string $args = array() ): WP_Post_Type|WP_Error


    • Registers a custom post type.
    • Should be hooked to the init action.
    • Use the $taxonomies argument for taxonomy connections for consistency.
    • Supports numerous built-in features like meta boxes, custom fields, etc.


    1. $post_type (string, required):

      • Key for the post type.
      • Max 20 characters, lowercase alphanumeric, dashes, underscores.
      • Use sanitize_key() for validation.
    2. $args (array|string, optional):

      • Arguments for the post type. Can be an array or string.
      • Key arguments include:
        • label: Name in the menu, usually plural.
        • labels: Array of labels. Inherits from post or page labels if not set.
        • description: Short summary of the post type.
        • public: Visibility and public accessibility settings.
        • hierarchical: Whether the post type is hierarchical (like pages).
        • exclude_from_search: Whether to exclude from front end search.
        • publicly_queryable: Front end query capabilities.
        • show_ui: Generate a UI in admin for managing the post type.
        • show_in_menu: Where to show in admin menu.
        • show_in_nav_menus, show_in_admin_bar: Visibility in menus and admin bar.
        • show_in_rest: Include in REST API for block editor compatibility.
        • menu_position, menu_icon: Menu positioning and icon.
        • capability_type, capabilities: Access control settings.
        • supports: Features like 'title', 'editor', 'thumbnail', etc.
        • register_meta_box_cb: Callback for meta boxes setup.
        • taxonomies: Taxonomies associated with the post type.
        • has_archive: Archive page settings.
        • rewrite: Permalink and rewrite rules.
        • query_var: Query var settings for direct access.
        • can_export: Allow export of this post type.
        • delete_with_user: Behavior on user deletion.
        • template, template_lock: Block editor template settings.
        • _builtin, _edit_link: Internal use flags.


    • WP_Post_Type | WP_Error: The registered post type object or a WP_Error object on failure.

    Example Usage:

    function create_custom_post_type() {
        register_post_type('custom_type', array(
            'label' => 'Custom Posts',
            'description' => 'Posts for custom data',
            'public' => true,
            'show_ui' => true,
            'supports' => array('title', 'editor', 'thumbnail'),
            'rewrite' => array('slug' => 'custom-posts')
    add_action('init', 'create_custom_post_type');

    In this example, a custom post type named 'custom_type' is created with basic settings like label, description, visibility, UI support, and rewrite rules. It's hooked to the 'init' action for proper initialization within WordPress.

Leave an answer