Starting from WordPress 3.0, custom post types (CPT) has been one of WP’s most unrivaled core features. I cannot recall how many times this wonderful feature had came to the rescue to help me achieve CMS-like functionalities in custom WP projects. As WP users, you have probably used CPT directly, by coding on it or indirectly by installing plugins that create their own CPTs like WooCommerce.

Since a couple of years ago, I have pretty much refrained from coding CPTs from scratch, unless for extremely simple post types. I have sworn my allegiance to two well-known CPT solution plugins namely Pods and Types. In this post, I’ll try my best to explain how they fare against each other, specifically on the way they handle CPTs (and custom taxonomies).  What I don’t intend to cover are extended features like user roles or data migration. Finally, there’s a bonus section about enhancing their functionalities.

WordPress Pods plugin

Pods WordPress plugin

The CPT management screens in Pods are really well-done and user friendly. If you are new to the world of CPTs, Pods will present you with a gentle learning curve to get you up and running. When you create a new CPT or custom taxonomy, you immediately have access to the custom fields management panel within the same CPT or custom taxonomy edit page. This makes the whole process of managing the custom fields a breeze and feels natural.

These are the main strengths of Pods:

  1. Nice and intuitive user interface.
  2. Large selection of custom field types.
  3. You can add custom fields to custom taxonomies too.
  4. Pods Template is an optional component you can enable in Pods to create templates for outputting Pods CPTs using magic tags and shortcodes all within WordPress without messing around with theme files.
  5. You can create a custom Settings page for miscellaneous usage.

The limitation of Pods based on my experience are:

  1. While you can create true parent-child (or one-to-many) relationships between Pods CPTs, the level of integration doesn’t appear to be truly seamless. For instance, in a property rental website presumably you had setup a one-to-many relationship between two CPTs; Properties and Rentals. However when editing a Property record you cannot add new Rental records in the same screen.
  2. Each CPT can only have one meta box named More Fields containing all the custom fields.
  3. You cannot make basic fields like plain text repeatable which could be handy in certain scenarios. Fortunately multiple image uploads is still possible.

WordPress Types plugin

Types WordPress plugin

The Types plugin may not look as straightforward to use at first glance primarily because the CPT and custom fields are managed in different admin screens but once you get your head around this it actually opens up a new possibility of the things you can do.

These are the main strengths of Types:

  1. You can create true parent-child (or one-to-many) relationships between any CPTs or WP’s native objects with very seamless integration. For instance, in a property rental website presumably you had setup a one-to-many relationship between two CPTs; Properties and Rentals. When editing a Property record you can quick-add new Rental records in the same screen. Additionally, you can also specify which fields should appear in the quick add form.
  2. You can have as many meta boxes with custom headings and combination of custom fields in each CPT. Furthermore, the meta boxes support custom CSS so you can arrange certain fields in side-by-side fashion instead of one per row for instance. This creates a more intuitive editing experience for the end users.
  3. All custom fields can be made repeatable.
  4. Non-repeatable custom fields can be fine-tuned with conditional logic to control when they should appear based on the values of other fields.
  5. Meta boxes and custom fields can be added to user profiles.
  6. The equivalence of Pods Templates for Types is called Views. It is not free but certainly a lot more powerful.

The limitation of Types based on my experience are:

  1. User interface can be a bit tricky to work with.
  2. No custom field of type Relationship.
  3. No way of adding custom fields to custom taxonomies.

Bonus: Advanced Custom Fields plugin

In cases where I was using Types and needed to use the Relationship-type custom field, I usually resorted to the Advanced Custom Fields plugin. It may sound like an overkill to use it solely for one purpose but the field provided by Advanced Custom Fields simply has the perfect UI for a relationship-type field. It is also far superior than what Pods provided by default.

The perfect UI for a relationship-type field.

The perfect UI for a relationship-type field.

As a matter fact, Advanced Custom Fields is by far the best custom fields plugin for WordPress. To unlock its full potential you need to purchase the Pro version though.

Bonus: Codepress Admin Columns plugin

When you are working with CPTs, the Codepress Admin Columns plugin is quite simply the icing of the cake for all your hard work. The plugin allows you to customize table columns in the admin landing page of CPTs or any WP’s native objects. It fulfills a basic need that greatly enhances user experience when working with CPTs in the admin area.

WP Admin Columns demo

Custom table columns FTW!

Though this plugin has a Pro version, the free one is awesome enough in most cases.


Pods and Types are my two favorite custom post types solutions for WordPress. How I decide between them depends ultimately on individual project requirements but so far I tend to choose Types for complex projects that require post relationship. With a couple of amazing supporting plugins, you’ll be having a blast working with either anyway.

Have a nice day!

Update (June 2015)

For an in-depth look at the features and technical differences between popular WordPress CPT plugins, view this awesome comparison matrix spreadsheet by Scott Kingsley Clark and Matt Gibbs.