Exciting News! Flipper Code is now WePlugins! Same commitment to excellence, brand new identity.

Create Dynamic Custom Post Types in WordPress

Sandeep Kumar Mishra
Sandeep Kumar Mishra
in Posts > Tech
August 7, 2021
5 minutes read
Create Dynamic Custom Post Types in WordPress

Custom post types & custom fields are widely used at our company and without these, we can’t imagine a website other than a blog.

We don’t use any plugin to create custom post types because of following reasons.

  • To avoid unnecessary dependencies on third party plugins.
  • Errors in the upcoming release of the plugin can affect our custom programming and might be bugs on the live site.
  • If client uninstalls this accidentally after a long period of development which happens sometimes.

This guides is about to create dynamic custom post types using procedure & oops programming and we guess after reading it, you’ll never use any plugin because it’s super easy to do.

Procedural Way to Create a Custom Post Types

Procedure oriented programming is preferred if you’re creating a custom post type in theme. You can write it in functions.php located at your installed theme. Below are the steps to understand it easily.

  1. Step 1: Make sure WordPress recognize your function on load so we use “init” action to register our function.
    add_action( 'init', 'create_custom_post_type' );
  2. Step 2: now in the definition of function ‘create_custom_post_type’, we can register as many as custom post type we need.
    function create_custom_post_type() {
        register_post_type( 'slides',
            array(
                'labels' => array(
                    'name' => __( 'Slides' ),
                    'singular_name' => __( 'Slide' )
                ),
            'public' => true,
            'has_archive' => true,
            )
        );
    }

    Note: If we’re creating custom post type to save some private data, don’t make it ‘public’=>true and not need for ‘has_archive’=>true if the custom post type is not public.

  3. OOPS Way to Create a Custom Post Types

    Object oriented programming is preferred if you’re creating a custom post type using a plugin. Below is “Custom_Posts” class which we use for our projects.

    class Custom_Posts {
     
        function __construct($init) {
     
            $this->settings = $init;
     
            add_action( 'init', array(&$this, 'add_custom_post_type') );
     
        }
     
         function add_custom_post_type() {
     
            register_post_type( $this->settings['slug'],
     
            array(
                'labels' => array(
                    'name' => __( $this->settings['name'] ),
                    'singular_name' => __( $this->settings['singular_name'] )
                ),
     
            'public' => $this->settings['is_public'],
     
            'has_archive' => $this->settings['has_archive'],
            )
     
        );
     
        }
    }

    Now you need to just initialize this object with your new custom post settings. Below is example code to create a SLIDES custom post type.

    $custom_posts = array(
        "slug" => "slides",
        "name" => "slides",
        "singular_name" => "slide",
        "is_public" => true,
        "has_archive" => false,
    );
     
    $var = new Custom_Posts ($custom_posts);

    Conclusion

    Adding too many custom post types is not a good practice because that’s can affect your speed of database transactions. Some of the developers prefer a dedicated category of the posts instead of a new custom post types which are not a good idea. If you don’t want to make your custom post type public, I’d prefer a new custom table instead of a new custom post type.

Sandeep Kumar Mishra

Sandeep Kumar Mishra

Sandeep Kumar Mishra writes about WordPress and Artificial Intelligence, offering tips and guides to help you master your website and stay updated with the latest tech trends.

Explore the latest in WordPress

Trying to stay on top of it all? Get the best tools, resources and inspiration sent to your inbox every Wednesday.