Configure your custom post types and their options pages, all from a single array.



Where the array contains a list of associative arrays with the options below:

Custom Post Type Object

"slug"stringYesPost type slug, used as an identifier
"icon"stringNoA dashicon to display in menus
"taxonomies"arrayNoA string array of taxonomy identifiers to register for this post type
"disable"arrayNoA string array of features to disable
"options-pages"arrayNoA string array of options pages to add to this post type, using this syntax
"options"arrayNoAn associative array of options to create the post type with, where labels and rewrite options can be set


The value of the "options" field is passed directly into the second parameter of WordPress’s register_post_type($name,$options) function, and uses these options.

To easily generate options for your custom post type, check out this website.

Disable Features

A list of possible features to disable using the "disabled" key

"yoast"Disables the Yoast SEO plugin for just this post type


Here is a custom post type for a TV Show with a genre taxonomy, custom labels, and an options page:

return [
"custom-post-types" => [
"slug" => 'shows',
"icon" => 'dashicons-format-video',
"options-pages" => ['show-archive-settings'],
"taxonomies" => ['genre'],
"disable" => ['yoast'],
"options" => [
"has_archive" => 'shows',
"show_in_nav_menus" => true,
"supports" => ['title', 'editor', 'thumbnail'],
"rewrite" => [
'slug' => 'shows',
'with_front' => true,
'pages' => true,
'feeds' => true,
"labels" => [
'name' => _x('TV Shows', 'Post Type General Name', 'text_domain'),
'singular_name' => _x('TV Show', 'Post Type Singular Name', 'text_domain'),
A new custom post type with the slug "shows"