Вы находитесь на странице: 1из 56

Custom Post Types and Taxonomies

n WordPress
Brad Williams
WebDevStudios.com
Who Am ?
Brad Williams
Co-Founder of WebDevStudios.com
Organizer NJ WordPress Meetup
Co-Host SitePoint Podcast
Co-Author of ProfessionaI WordPress (http://bit.ly/pro-wp)
Who Am ?
P xplain Custom Post Types and Taxonomies
P Create Custom Post Types
P Create Custom Taxonomies
P Hooking into WordPress
Topics
So what are So what are
Custom Post Types? Custom Post Types?
So what are So what are
Custom Post Types? Custom Post Types?
CODEX: Post type refers to the various structured data that is
maintained in the WordPress posts table. Native (or built-in) post type
are post, page, attachment, revision, and nav-menu-item. Custom
post types are also supported in WordPress and can be defined
with register_post_type().
WTFrack? WTFrack?
So what are So what are
Custom Post Types Really? Custom Post Types Really?
ENGLISH: Custom Post Types allow you to create different types of
content in WordPress.
Default WordPress Post Types:
Posts
Pages
Attachments
Revisions
Nav Menus (WP 3.0)
Custom Post Type deas Custom Post Type deas
Podcasts
Movies
Bars
Forum
Quotes
Videos
Cars
House Listings
vents
Ticket System
etc, etc, etc
The
possibilities
are endless!
xample Time! xample Time!
Tweet: @williamsba CAUTON ZOMBS AHAD! #wcraleigh
Win a copy of Professional WordPress!
xample: Zombie Modeling Agency xample: Zombie Modeling Agency
xample: Zombie Modeling Agency xample: Zombie Modeling Agency
<?php
add_action( 'init', 'create_zombie_post_type' );
function create_zombie_post_type() {
register_post_type('zombies',
array(
'label' => 'Zombies',
'public' => true,
)
);
}
?>
Drop the below code in your themes functions.php file
xample: Zombie Modeling Agency xample: Zombie Modeling Agency
Drop the below code in your themes functions.php file
xample: Zombie Modeling Agency xample: Zombie Modeling Agency
<?php
add_action( 'init', 'create_zombie_post_type' );
function create_zombie_post_type() {
register_post_type('zombies',
array(
'label' => 'Zombies',
'public' => true,
)
);
}
?>
Lets break it down:
1. Action hook to trigger our function
2. xecute the register_post_type
function defining zombies as our
custom post type
3. Set the label to Zombies
4. Set public to true. By default
public is false which will hide your
post type
Additional Arguments: Additional Arguments: IabeIs IabeIs
An array of strings that represent your post type in the WP admin
name: The plural form of the name of your post type.
singular_name: The singular form of the name of your post type.
add_new: The menu item for adding a new post.
add_new_item: The header shown when creating a new post.
edit: The menu item for editing posts.
edit_item: The header shown when editing a post.
new_item: Shown in the favorites menu in the admin header.
view: Used as text in a link to view the post.
view_item: Shown alongside the permalink on the edit post screen.
search_items: Button text for the search box on the edit posts screen.
not_found: Text to display when no posts are found through search in the admin.
not_found_in_trash: Text to display when no posts are in the trash.
parent: Used as a label for a parent post on the edit posts screen. Only useful for
hierarchical post types.
Ref: http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress
Additional Arguments: Additional Arguments: IabeIs IabeIs
register_post_type('zombies',
array(
'labels' => array(
'name' => 'Zombies',
'singular_name' => 'Zombie',
'add_new' => 'Add New Zombie',
'add_new_item' => 'Add New Zombie',
'edit' => 'dit Zombies',
'edit_item' => 'dit Zombie',
'new_item' => 'New Zombie',
'view' => 'View Zombie',
'view_item' => 'View Zombie',
'search_items' => 'Search Zombies',
'not_found' => 'No zombies found',
'not_found_in_trash' => 'No zombies found in Trash',
'parent' => 'Parent Zombie',
),
'public' => true,
)
);
An array of strings that represent your post type in the WP admin
Additional Arguments: Additional Arguments: IabeIs IabeIs
The Result
Additional Arguments: Additional Arguments: supports supports
Defines what meta boxes and other fields appear on the edit screen
title: Text input field for the post title.
editor: Main content meta box
comments: Ability to turn comments on/off.
trackbacks: Ability to turn trackbacks and pingbacks on/off.
revisions: Allows revisions to be made of your post.
author: Displays the post author select box.
excerpt: A textarea for writing a custom excerpt.
thumbnail: The post thumbnail (featured imaged) upload box.
custom-fields: Custom fields input area.
page-attributes: The attributes box shown for pages. mportant for
hierarchical post types, so you can select the parent post.
Additional Arguments: Additional Arguments: supports supports
Defines what meta boxes and other fields appear on the edit screen
register_post_type('zombies',
array(
'labels' => array(
'name' => 'Zombies',
'singular_name' => 'Zombie',
'add_new' => 'Add New Zombie',
'add_new_item' => 'Add New Zombie',
'edit' => 'dit Zombies',
'edit_item' => 'dit Zombie',
'new_item' => 'New Zombie',
'view' => 'View Zombie',
'view_item' => 'View Zombie',
'search_items' => 'Search Zombies',
'not_found' => 'No zombies found',
'not_found_in_trash' => 'No zombies found in Trash',
'parent' => 'Parent Zombie',
),
'supports' => array('title'),
'public' => true,
)
);
Additional Arguments: Additional Arguments: supports supports
Defines what meta boxes and other fields appear on the edit screen
Only the Title and Publish meta boxes are displayed
Additional Arguments: Additional Arguments: supports supports
Now lets activate all meta boxes
register_post_type('zombies',
array(
'labels' => array(
'name' => 'Zombies',
'singular_name' => 'Zombie',
'add_new' => 'Add New Zombie',
'add_new_item' => 'Add New Zombie',
'edit' => 'dit Zombies',
'edit_item' => 'dit Zombie',
'new_item' => 'New Zombie',
'view' => 'View Zombie',
'view_item' => 'View Zombie',
'search_items' => 'Search Zombies',
'not_found' => 'No zombies found',
'not_found_in_trash' => 'No zombies found in Trash',
'parent' => 'Parent Zombie',
),
'supports' => array('title','editor','excerpt','trackbacks','custom-fields',
'comments','revisions','thumbnail','author','page-attributes'),
'public' => true,
)
);
Additional Arguments: Additional Arguments: supports supports
Now all meta boxes are displayed on the Zombie edit screen
Additional Arguments: Additional Arguments: rewrite rewrite
Defines the permalink structure of your custom post type posts
slug: The slug to use in your permalink structure
with_front: whether your post type should use the front base from
your permalink settings (eg /blog)
'rewrite' => array('slug' => 'zombie') xample:
BFOR
AFTR
Additional Arguments: Additional Arguments: taxonomies taxonomies
Add preexisting taxonomies to your custom post type
'taxonomies' => array(
'post_tag', 'category')
xample:
Additional Arguments: Additional Arguments: misc misc
Below are additional arguments for creating custom post types
hierarchical: whether the post type is hierarchical
description: a text description of your custom post type
show_ui: whether to show the admin menus/screens
menu_position: Set the position of the menu order where the post
type should appear
menu_icon: URL to the menu icon to be used
exclude_from_search: whether post type content should appear
in search results
Putting it all together Putting it all together
register_post_type('zombies',
array(
'description' => 'Zombie custom post type',
'show_ui' => true,
'menu_position' => 5,
'menu_icon' => get_stylesheet_directory_uri() . '/images/zombies.png',
'exclude_from_search' => false,
'labels' => array(
'name' => 'Zombies',
'singular_name' => 'Zombie',
'add_new' => 'Add New Zombie',
'add_new_item' => 'Add New Zombie',
'edit' => 'dit Zombies',
'edit_item' => 'dit Zombie',
'new_item' => 'New Zombie',
'view' => 'View Zombie',
'view_item' => 'View Zombie',
'search_items' => 'Search Zombies',
'not_found' => 'No zombies found',
'not_found_in_trash' => 'No zombies found in Trash',
'parent' => 'Parent Zombie',
),
'supports' => array('title','editor','excerpt', 'trackbacks','custom-fields',
'comments','revisions','thumbnail','author','page-attributes'),
'public' => true,
'rewrite' => array('slug' => 'zombie', 'with_front' => false),
'taxonomies' => array( 'post_tag', 'category')
)
);
So what are Taxonomies? So what are Taxonomies?
So what are Taxonomies? So what are Taxonomies?
ENGLISH: Taxonomies are a way to group similar items together
Default WordPress Taxonomies:
Category
Tag
Link Category
xample Time! xample Time!
Tweet: @williamsba ZOMBS N ARA! RUN #wcraleigh
Win a copy of Professional WordPress!
xample: Zombie Modeling Agency xample: Zombie Modeling Agency
<?php
add_action( 'init', 'create_zombie_taxonomies' );
function create_zombie_taxonomies() {
register_taxonomy( 'freshness', 'zombies', array(
'hierarchical' => false, 'label' => 'Freshness' ) );
}
?>
Drop the below code in your themes functions.php file
Non-hierarchical Taxonomy
xample: Zombie Modeling Agency xample: Zombie Modeling Agency
New custom taxonomy is
automatically added to the
Zombies post type menu
The Freshness meta box is also
automatically added to the
Zombie edit screen
automatically!
xample: Zombie Modeling Agency xample: Zombie Modeling Agency
<?php
add_action( 'init', 'create_zombie_taxonomies' );
function create_zombie_taxonomies() {
register_taxonomy( 'freshness', 'zombies', array(
'hierarchical' => true, 'label' => 'Freshness' ) );
}
?>
Drop the below code in your themes functions.php file
Hierarchical Taxonomy
xample: Zombie Modeling Agency xample: Zombie Modeling Agency
New custom taxonomy is
automatically added to the
Zombies post type menu
The Freshness meta box is also
automatically added to the
Zombie edit screen
automatically!
xample: Zombie Modeling Agency xample: Zombie Modeling Agency
Lets break it down:
1. Action hook to trigger our function
2. xecute the register_taxonomy function
defining freshness as our custom
taxonomy
3. Set the name to freshness
4. Set the object type to 'zombies'. Must
be an existing post type
5. Set hierarchical to false
6. Set our taxonomy label to Freshness
<?php
add_action( 'init',
'create_zombie_taxonomies' );
function create_zombie_taxonomies() {
register_taxonomy(
'freshness',
'zombies',
array(
'hierarchical' => false,
'label' => 'Freshness'
)
);
}
?>
Additional Arguments: labels Additional Arguments: labels
An array of strings that represent your taxonomy in the WP admin
name: The general name of your taxonomy
singular_name: The singular form of the name of your taxonomy.
search_items: The search items text
popular_items: The popular items text
all_items: The all items text
parent_item: The parent item text. Only used on hierarchical taxonomies
parent_item_colon: Same as parent_item, but with a colon
edit_item: The edit item text
update_item: The update item text
add_new_item: The add new item text
new_item_name: The new item name text
Additional Arguments: labels Additional Arguments: labels
register_taxonomy(
'freshness',
'zombies',
array(
'labels' => array(
'name' => 'Freshness',
'singular_name' => 'Freshness',
'search_items' => 'Search Freshness',
'popular_items' => 'Popular Freshness',
'all_items' => 'All Freshness',
'parent_item' => 'Parent Freshness',
'parent_item_colon' => 'Parent Freshness:',
'edit_item' => 'dit Freshness',
'update_item' => 'Update Freshness',
'add_new_item' => 'Add New Freshness',
'new_item_name' => 'New Freshness Name'
),
'hierarchical' => false,
'label' => 'Freshness' )
);
An array of strings that represent your taxonomy in the WP admin
Additional Arguments: labels Additional Arguments: labels
The Result
Additional Arguments: rewrite Additional Arguments: rewrite
Defines the permalink structure for your custom taxonomy
slug: The slug to use in your permalink structure
with_front: whether your taxonomy should use the front base from
your permalink settings (eg /blog)
'rewrite' => array('slug' => fresh') xample:
BFOR
AFTR
http://x.webdevstudios.com/blog/freshness/ripe/
http://x.webdevstudios.com/blog/fresh/ripe/
Additional Arguments: misc Additional Arguments: misc
Below are additional arguments for creating custom taxonomies
public: whether the taxonomy is publicly queryable
show_ui: whether to display the admin U for the taxonomy
hierarchical: whether the taxonomy is hierarchical. Categories
are hierarchical, tags are not.
label: the name of your taxonomy in the admin dashboard
query_var: whether to be able to query posts using the taxonomy.
rewrite: whether to use a pretty permalink when viewing the
taxonomy page.
show_tagcloud: whether to show a tag cloud in the admin U
Putting it all together Putting it all together
register_taxonomy(
'freshness',
'zombies',
array(
'labels' => array(
'name' => 'Freshness',
'singular_name' => 'Freshness',
'search_items' => 'Search Freshness',
'popular_items' => 'Popular Freshness',
'all_items' => 'All Freshness',
'parent_item' => 'Parent Freshness',
'parent_item_colon' => 'Parent Freshness:',
'edit_item' => 'dit Freshness',
'update_item' => 'Update Freshness',
'add_new_item' => 'Add New Freshness',
'new_item_name' => 'New Freshness Name'
),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'query_var' => 'freshness',
'show_tagcloud' => true,
'rewrite' => array( 'slug' => 'fresh', 'with_front' => false )
)
);
Displaying in WordPress
#protip
Displaying Custom Post Type Content
<?php query_posts( array( 'post_type' => 'zombies' ) ); ?>
By default custom post type content will NOT display in the Loop
Placing the above code directly before the Loop will only display our zombies
Displaying Custom Post Type Content
<?php query_posts( array( 'post_type' => 'zombies' ) ); ?>
BFOR ZOMBD
(After)
Custom Loop
<?php
$zombies = new WP_Query( array( 'post_type' => 'zombies', 'posts_per_page' => 1, 'orderby' => 'rand' ) );
while ( $zombies->have_posts() ) : $zombies->the_post();
the_title( '<h2><a href="' . get_permalink() . '" >', '</a></h2>' );
?>
<div class="entry-content">
<?php the_content(); ?>
</div>
<?php endwhile; ?>
Creating a custom Loop for your post type
<?php
if (have_posts()) : while (have_posts()) : the_post();
$post_type = get_post_type( get_the_D() );
if ($post_type == 'zombies') {
echo 'This is a Zombie!';
}
?>
<?php endwhile; ?>
<?php endif; ?>
Function: get_post_type()
Returns the post type of the content you are viewing
Custom Post Type Functions
http://codex.wordpress.org/Function_Reference/get_post_type
if ( is_post_type( 'zombies' ) ) {
echo 'Zombies xist!';
}
Function: is_post_type()
Check if a post type exists
Custom Post Type Functions
if ( is_post_type( 'zombies' $post_id) ) {
echo 'Post D: ' .$post_id .'is a Zombie!';
}
Can also check a specific post against a post type
<?php echo get_the_term_list( $post->D, 'freshness', 'Freshness: ', ', ', '' ); ?>
Function: get_the_term_list()
Display freshness taxonomy for our zombies
Custom Taxonomy Functions
http://codex.wordpress.org/Function_Reference/get_the_term_list
Recommended Plugin
Custom Post Type U
http://wordpress.org/extend/plugins/custom-post-type-ui/
asily create custom post types without writing code!
Custom Post Type U
http://wordpress.org/extend/plugins/custom-post-type-ui/
Also easily create custom taxonomies without writing code!
Custom Post Type U
http://wordpress.org/extend/plugins/custom-post-type-ui/
Plugin also gives you the PHP code for custom post types and taxonomies!
P Related Codex Articles
ttp://codex.wordpress.org/Hardening_WordPress
P Custom Post Type Articles
ttp://justintadlock.com/arcives/2010/04/23/customposttypesinwordpress
ttp://justintadlock.com/arcives/2010/02/02/sowingcustomposttypesonyourome
blogpage
ttp://kovsenin.com/arcives/customposttypesinwordpress30/
ttp://wpengineer.com/impressionsofcustomposttype/
P Custom Taxonomies
ttp://justintadlock.com/arcives/2003/0S/06/customtaxonomiesinwordpress28
ttp://justintadlock.com/arcives/2003/06/04/usingcustomtaxonomiestocreateamovie
database
ttp://www.sibasake.com/wordpressteme/wordpresscustomtaxonomyinputpanels
Custom Post Type and Taxonomy Resources
Brad Williams
brad@webdevstudios.com
Blog: strangework.com
Twitter: @williamsba
RC: WDS-Brad
Contact
Professional WordPress: http://bit.ly/pro-wp

Вам также может понравиться