Last updated on February 10, 2018
Often clients ask for different content types in WordPress. Creating custom post types in WordPress is a lot easier job. A custom post type can be added to WordPress via the register_post_type() function. This function allows you to define a new post type by its labels, supported features, availability and other specifics.
Custom post types are content types like posts and pages. Following are the reserved content types in WordPress – Post, Page, Attachment, Revision, Nav Menu.
In addition, the following post types should not be used as they interfere with other WordPress functions – action, author, order, theme.
To avoid conflicts with existing WordPress query variables, you should always prefix your post types.
Lets create custom post type called “Movies”. Shorted form of the custom post type implementation is:
register_post_type( 'movies', array( 'labels' => array( 'name' => __( 'Movies' ), 'singular_name' => __( 'Movie' ) ), 'public' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'movies'), ) );
Now let’s take a look at a detailed piece of code that adds more options to your custom post type.
// Set UI labels for Custom Post Type $labels = array( 'name' => _x( 'Movies', 'Post Type General Name', 'twentythirteen' ), 'singular_name' => _x( 'Movie', 'Post Type Singular Name', 'twentythirteen' ), 'menu_name' => __( 'Movies', 'twentythirteen' ), 'parent_item_colon' => __( 'Parent Movie', 'twentythirteen' ), 'all_items' => __( 'All Movies', 'twentythirteen' ), 'view_item' => __( 'View Movie', 'twentythirteen' ), 'add_new_item' => __( 'Add New Movie', 'twentythirteen' ), 'add_new' => __( 'Add New', 'twentythirteen' ), 'edit_item' => __( 'Edit Movie', 'twentythirteen' ), 'update_item' => __( 'Update Movie', 'twentythirteen' ), 'search_items' => __( 'Search Movie', 'twentythirteen' ), 'not_found' => __( 'Not Found', 'twentythirteen' ), 'not_found_in_trash' => __( 'Not found in Trash', 'twentythirteen' ), ); // Set other options for Custom Post Type $args = array( 'label' => __( 'movies', 'twentythirteen' ), 'description' => __( 'Movie news and reviews', 'twentythirteen' ), 'labels' => $labels, // Features this CPT supports in Post Editor 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ), // You can associate this CPT with a taxonomy or custom taxonomy. 'taxonomies' => array( 'genres' ), /* A hierarchical CPT is like Pages and can have * Parent and child items. A non-hierarchical CPT * is like Posts. */ 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_position' => 5, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'post', 'menu_icon' => bloginfo('template_directory'). '/images/movie-menu-icon.png', ); // Registering your Custom Post Type register_post_type( 'movies', $args );