We have a number of CPT created for all scenarios, these follow the following format.
<?php $singular_name = 'component'; $singular_label = 'Component'; $plural_label = 'Components'; $menu_icon = 'dashicons-index-card'; $taxonomies = array(); $supports = array('title', 'thumbnail', 'editor', 'custom-fields', 'revisions'); $labels = array( 'name' => _x( $plural_label, 'post type general name' ), 'singular_name' => _x( $singular_label, 'post type singular name' ), 'menu_name' => _x( $plural_label, 'admin menu' ), 'name_admin_bar' => _x( $singular_label, 'add new on admin bar'), 'add_new' => _x( 'Add New', $singular_label ), 'add_new_item' => __( 'Add New ' . $singular_label ), 'new_item' => __( 'New ' .$singular_label . ' name' ), 'edit_item' => __( 'Edit ' . $singular_label ), 'view_item' => __( 'View ' . $singular_label), 'all_items' => __( 'All ' . $plural_label), 'search_items' => __( 'Search ' . $plural_label), 'parent_item_colon' => __( 'Parent ' . $plural_label . ':'), 'not_found' => __( 'No ' . $plural_label . ' found' ), 'not_found_in_trash' => __( 'No ' . $plural_label . ' found in Trash' ), ); $post_type_args = array( 'public' => true, 'publicly_queryable' => true, 'exclude_from_search' => true, 'map_meta_cap' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'has_archive' => true, 'hierarchical' => false, 'show_in_rest' => true, 'menu_position' => 5, 'labels' => $labels, 'description' => __( ''), 'menu_icon' => $menu_icon, 'supports' => $supports, 'taxonomies' => $taxonomies 'rewrite' => array('slug' => $singular_name, 'with_front' => true ), 'capability_type' => 'post', ); register_post_type($singular_name ,$post_type_args); ?>
These are simply included in the theme functions.php
<?php if ( ! function_exists( 'gomo_cpt_init' ) ) : function gomo_cpt_init() { if( get_field('remove_admin_scripts', 'options') == 0 ): require get_template_directory() . '/gomo-functions/admin.php'; endif; require get_template_directory() . '/gomo-functions/custom-post-types/documentation.php' ; require get_template_directory() . '/gomo-functions/custom-post-types/components.php' ; require get_template_directory() . '/gomo-functions/custom-post-types/testimonials.php' ; require get_template_directory() . '/gomo-functions/custom-post-types/listings.php' ; require get_template_directory() . '/gomo-functions/custom-post-types/panel.php' ; require get_template_directory() . '/gomo-functions/custom-post-types/case-studies.php' ; require get_template_directory() . '/gomo-functions/acf/acf.php' ; require get_template_directory() . '/gomo-functions/custom-taxonomy/resources.php' ; require get_template_directory() . '/gomo-functions/custom-taxonomy/listings.php' ; require get_template_directory() . '/gomo-functions/custom-taxonomy/case-studies.php' ; } endif; add_action( 'init', 'gomo_cpt_init' ); ?>