Post Type Generator

Use this tool to create custom code for Post Types with register_post_type() function. Fill out the form, update the code, copy the code to your theme/plugin.

The function used in the code.
Add Child Themes Support.
Translation file Text Domain. Optional.
Key used in the code. Up to 32 characters, lowercase. A short descriptive summary of the post type.
Post type singular name. e.g. Product, Event or Movie. Post type plural name. e.g. Products, Events or Movies.
Link to Taxonomies. Commas separated taxonomies. Hierarchical post types allows descendants.
Posts of this type should be excluded from search results.
Enables post type export. Enables post type archives.
Show post type in the admin UI. Show post type UI in the admin.
Show post type in admin sidebar. Post type icon URL for the sidebar.
Show post type in admin bar. Available in Navigation Menus.
Direct query variable used in WP_Query. e.g. WP_Query( array( 'post_type' => 'product', 'term' => 'disk' ) )
Enable front end queries as part of parse_request().
Custom query variable.
Use Default Permalinks (using post type key), prevent automatic URL rewriting (no pretty permalinks), or set custom permalinks.
Pretty permalink base text. i.e. www.example.com/product/ Use Post Type slug as URL base.
Default: Yes
Allow post-type pagination.
Default: Yes
Build feed permastruct.
Default: Yes
Set user capabilities to manage post type. Used as a base to construct capabilities.

// Register Custom Post Type
function custom_post_type() {
	$labels = array(
		'name'                => _x( 'Products', 'Post Type General Name', 'text_domain' ),
		'singular_name'       => _x( 'Product', 'Post Type Singular Name', 'text_domain' ),
		'menu_name'           => __( 'Product', 'text_domain' ),
		'parent_item_colon'   => __( 'Parent Product:', 'text_domain' ),
		'all_items'           => __( 'All Products', 'text_domain' ),
		'view_item'           => __( 'View Product', 'text_domain' ),
		'add_new_item'        => __( 'Add New Product', 'text_domain' ),
		'add_new'             => __( 'New Product', 'text_domain' ),
		'edit_item'           => __( 'Edit Product', 'text_domain' ),
		'update_item'         => __( 'Update Product', 'text_domain' ),
		'search_items'        => __( 'Search products', 'text_domain' ),
		'not_found'           => __( 'No products found', 'text_domain' ),
		'not_found_in_trash'  => __( 'No products found in Trash', 'text_domain' ),
	);

	$args = array(
		'label'               => __( 'product', 'text_domain' ),
		'description'         => __( 'Product information pages', 'text_domain' ),
		'labels'              => $labels,
		'supports'            => array( ),
		'taxonomies'          => array( 'category', 'post_tag' ),
		'hierarchical'        => false,
		'public'              => true,
		'show_ui'             => true,
		'show_in_menu'        => true,
		'show_in_nav_menus'   => true,
		'show_in_admin_bar'   => true,
		'menu_position'       => 5,
		'menu_icon'           => '',
		'can_export'          => true,
		'has_archive'         => true,
		'exclude_from_search' => false,
		'publicly_queryable'  => true,
		'capability_type'     => 'page',
	);

	register_post_type( 'product', $args );
}

// Hook into the 'init' action
add_action( 'init', 'custom_post_type', 0 );