This article is over two years old. Life moves quickly, and thus there is a good chance any references, recommendations, or opinions in this content are out of date. Make sure to verify any information independently.

Persistent WordPress Custom Post Types

Published 06 March 2011

I recently changed the way I create custom post types in WordPress. Usually, you create all the declarations in the functions.php file, but if you change your theme, you lose the custom post type (the content is still there, just not the custom post type). Here’s how to make your custom post types persistent.

The way I have it now, is I have everything in a custom plugin. Nothing fancy, just a super-basic plugin. The code is exactly the same as in functions.php, but now it’s in a plugin, so if I change my theme, it keeps all the custom post types.

Here’s how to do just that.

Set up the Plugin

Make a PHP file and name it something unique, like “mysitename-cpt.php“. At the very top of the file, put some basic meta information:

/*
    Plugin Name: MYSITE's Custom Post Types
    Description: The custom post type declarations for my site.
    Version: 1.0
    Author: YOUR NAME
    Author URI: YOUR WEBSITE
    License: GPL2
*/

Underneath that, simply copy & paste the custom post type and custom post taxonomies from your functions.php file into this plugin. Make sure you transfer the add_action() calls for your custom post types/taxonomies as well.

Then remove all the custom post type stuff from your functions.php file, and make sure you upload and activate your new custom plugin. You’re done!