CPT

 Creating a WordPress Custom Post Type

dev • June 20, 2026
4 min read

A Custom Post Type (CPT) in WordPress allows developers to create specialized content types beyond the default Posts and Pages. Examples include Books, Movies, Products, Events, and Pets.

Using a CPT helps organize content and provides a dedicated administration interface within the WordPress dashboard.

 Why Use a Custom Post Type?

WordPress includes several built-in post types:

* Posts

* Pages

* Attachments

* Revisions

* Navigation Menus

When a project requires a unique content structure, a custom post type is the recommended solution.

 Best Practice: Register CPTs in a Plugin

Instead of adding CPT code directly to a theme’s `functions.php` file, create a plugin. This ensures the content type remains available even if the theme changes.

Example plugin header:


<?php

/*

* Plugin Name: Custom Post Type Register
* Description: Registers custom post types
* Author: Your Name
*/

 Step 1: Define Supported Features

Specify which editing features should be available:

<?php

$supports = array(
'title',
'editor'
'author',
'thumbnail',
'excerpt',
'custom-fields',
'comments',
'revisions'
);

Step 2: Define Labels

Labels control how the post type appears in the WordPress administration panel.

<?php

$labels = array(

    ‘name’          => ‘Pets’,

    ‘singular_name’ => ‘Pet’,

    ‘menu_name’     => ‘Pets’,

    ‘add_new_item’  => ‘Add New Pet’,

);

 Step 3: Register the Custom Post Type

Create the CPT using `register_post_type()`.

<?php

$args = array(
'supports' => $supports,
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array(
   'slug' => 'pets',
   );
),

register_post_type('pets', $args);

 Step 4: Hook into WordPress Initialization

Register the post type during WordPress initialization.

<?php

add_action('init', 'register_pet_post_type');

 Complete Example

<?php

function register_pet_post_type() { 
$supports = array(
   'title',
   'editor',
   'thumbnail'
);
$labels = array(
   'name' => 'Pets',
   'singular_name' => 'Pet',
   'menu_name' => 'Pets',
);
$args = array(
   'supports' => $supports,
   'labels' => $labels,
   'public' => true,
   'has_archive' => true,
   'rewrite' => array(
       'slug' => 'pets',
    ),
);
register_post_type('pets', $args);
add_action('init', 'register_pet_post_type');
}

 Additional Notes

* Use lowercase CPT identifiers.

* Keep CPT names under 20 characters.

* Refresh permalinks after creating a CPT by visiting **Settings → Permalinks** and clicking **Save Changes**.

* Consider enabling REST API support for compatibility with the Gutenberg editor and headless WordPress applications.

 Conclusion

Custom Post Types are a core WordPress feature that enables structured content management. Registering CPTs through a plugin provides a maintainable and reusable approach for extending WordPress functionality.

If you need this as a formal project report, technical documentation, or academic-style document, I can reformat it accordingly.

D

Written by dev

Member of the Studio Engineering and Product Architecture practice.

Leave a Reply

Your email address will not be published. Required fields are marked *