Skip to content

Custom Post Types - Content Beyond Posts and Pages πŸ“š ​

Why Custom Post Types (CPTs)? πŸ€” ​

Okay, sure, WordPress gives you Posts and Pages by default. But what if you're building something like a movie database, a product catalog, or a real estate listing site? Would you really want to stuff all that into Posts? No way, JosΓ©! This is where Custom Post Types come in handy. CPTs allow you to create new content types that suit the specific needs of your site.

For example:

  • Movies for a movie database 🎬
  • Products for an e-commerce site πŸ›οΈ
  • Recipes for a food blog πŸ•πŸ²

Let’s dive into creating your very own CPT.

Step 1: Registering a Custom Post Type πŸ—οΈ ​

To add a new custom post type, we’ll modify the functions.php file again. Say, for example, you want to create a custom post type called β€œMovies”. Here’s how you can do it:

php
function my_noob_theme_register_movie_cpt() {
    $labels = array(
        'name'               => _x( 'Movies', 'post type general name', 'mynoobtheme' ),
        'singular_name'      => _x( 'Movie', 'post type singular name', 'mynoobtheme' ),
        'menu_name'          => _x( 'Movies', 'admin menu', 'mynoobtheme' ),
        'name_admin_bar'     => _x( 'Movie', 'add new on admin bar', 'mynoobtheme' ),
        'add_new'            => _x( 'Add New', 'movie', 'mynoobtheme' ),
        'add_new_item'       => __( 'Add New Movie', 'mynoobtheme' ),
        'new_item'           => __( 'New Movie', 'mynoobtheme' ),
        'edit_item'          => __( 'Edit Movie', 'mynoobtheme' ),
        'view_item'          => __( 'View Movie', 'mynoobtheme' ),
        'all_items'          => __( 'All Movies', 'mynoobtheme' ),
        'search_items'       => __( 'Search Movies', 'mynoobtheme' ),
        'not_found'          => __( 'No movies found.', 'mynoobtheme' ),
        'not_found_in_trash' => __( 'No movies found in Trash.', 'mynoobtheme' ),
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'movies' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
    );

    register_post_type( 'movie', $args );
}
add_action( 'init', 'my_noob_theme_register_movie_cpt' );
  • register_post_type(): This function registers a new post type (in this case, β€œMovie”).
  • supports: This specifies the WordPress features that your post type will support, like the editor, featured image (thumbnail), and comments.
  • has_archive: If set to true, WordPress will automatically generate an archive page for this post type (e.g., yoursite.com/movies).
  • rewrite: You can define the custom slug for your post type, in this case, movies.

Step 2: Displaying Custom Post Types πŸš€ ​

Now that you have registered the "Movies" post type, let’s display the custom posts on the frontend. First, create a new file called archive-movie.php. This file will be used to show the archive page for your movies.

php
<?php get_header(); ?>

    <h1>Movies Archive</h1>

    <?php if ( have_posts() ) : ?>
        <ul>
            <?php while ( have_posts() ) : the_post(); ?>
                <li>
                    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                </li>
            <?php endwhile; ?>
        </ul>
    <?php else : ?>
        <p>No movies found.</p>
    <?php endif; ?>

<?php get_footer(); ?>
  • archive-movie.php: This is a special template file in WordPress that handles the archive page for your β€œMovie” post type.
  • have_posts() and the_post(): Standard WordPress functions to loop through your posts.

Now visit yoursite.com/movies, and voilΓ ! Your movie archive is alive! πŸŽ₯

Step 3: Custom Post Type Templates 🧱 ​

In WordPress, you can create custom templates for your post types just like you do with regular posts and pages:

  • archive-{posttype}.php: Handles the archive page for a custom post type (e.g., archive-movie.php for the "Movies" post type).
  • single-{posttype}.php: Handles the individual post display for a custom post type (e.g., single-movie.php).

With this, you can customize how each type of content is displayed on your website.

Now that you're armed with the power of CPTs, you're ready to build a WordPress site that fits any type of content! Whether you're creating a movie database, a product catalog, or a portfolio, CPTs give you the flexibility you need. πŸ’ͺπŸŽ‰

Built by noobs, for noobs, with love πŸ’»β€οΈ