=== GigaOM Custom Post Type Factory === Contributors: misterbisson Tags: custom post types, posts, post types, custom posts, developers Requires at least: 3.3 Tested up to: 3.4.1 Stable tag: trunk Makes defining custom post types as easy as creating a widget. Includes example code to get you started. == Description == This is a convenience class and collection of methods to make creating new custom post types with their own metaboxes easy. The general idea is to define a function that's hooked to the `register_post_types` action. The function defines a class for your post type that extends the `GO_Cpt` class. This follows a design pattern established by the modern widgets API (as introduced in WP 2.8) http://codex.wordpress.org/Widgets_API#Developing_Widgets . The result is a new custom post type and much easier creation and updating of custom meta associated with that post type. You'll also have a convenient object you can use to access the metadata associated with each post. ` function my_customposttype() { class My_CustomPostType extends GO_Cpt { function __construct() { // execute the parent constructor with the name // and definition for the custom post type parent::__construct( $post_type_name , $post_type_definition ); } function metabox( $post , $meta ) { // print out the form here // // this method is optional, only use it if you want to // add a metabox to your custom post type } function update( $new_meta , $old_meta ) { // sanitize and validate the metadata // then return $meta so it can be saved // // this method is required if a // metabox() method is included } } global $my_customposttype; $my_customposttype = new My_CustomPostType; } // hook that function to the register_post_types action add_action( 'register_post_types' , 'my_customposttype' ); ` Backstory: defining the post type class inside the function avoids issues with loading order and fatal errors resulting from attempting to extend a class that might not exist yet. Isn't PHP awesome? See the included hello world example: http://plugins.trac.wordpress.org/browser/go-cptfactory/trunk/example-helloworld-cpt.php To access the meta associated with a post, you can call `$my_customposttype->get_meta( $post_id );` You can easily add a method and hook to filter `the_content` or `the_excerpt` to insert custom values that may have been entered in the post meta. Simply add `add_filter( 'the_content' , array( $this , 'the_content' ));` in the `__construct()` and then define another method in the `My_CustomPostType` class such as:` function the_content( $content ) { $meta_print = print_r( $this->get_meta( get_the_ID() ) , TRUE ); return $meta_print . $content } ` == Frequently Asked Questions == = Q: Code is complex, is there an easier way to do this? = A: You should consinder Pods: http://podsframework.org = Q: If Pods is out there, why did you bother with this? = A: Pods is cool, but this keeps the problem in code, without any dependency on configuration information stored in the database. This also fits the architecture I like where the code related to a post type is associated with the post type definition. In my use, custom post type classes actually have many more methods to collect, validate, and display their data. == Installation == 1. Place the plugin folder in your `wp-content/plugins/` directory and activate it. 1. To actually use it, you'll have to define a custom post type class. See more: http://wordpress.org/extend/plugins/go-cptfactory/