Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Surviving the Zombie Apocalypse using Custom Post Types and Taxonomies
1. Surviving the Zombie Apocalypse using
Custom Post Types and Taxonomies
Brad Williams
WebDevStudios.com
@williamsba
2. Who Am I?
Brad Williams
Co-Founder of WebDevStudios.com
Co-Host SitePoint Podcast
Co-Author of Professional WordPress (http://bit.ly/pro-wp)
& Professional WordPress Plugin Development
(http://amzn.to/plugindevbook)
4. Topics
How to Kill Zombies
Explain Custom Post Types and Taxonomies
Create Custom Post Types
Create Custom Taxonomies
Hooking into WordPress
10. Custom Post Type Ideas
• Podcasts
• Movies
• Bars
• Forum The
• Quotes
• Videos possibilities
• Cars are endless!
• House Listings
• Events
• Ticket System
• etc, etc, etc
11. To defeat your enemy you
must know your enemy
Tweet: @williamsba CAUTION ZOMBIES AHEAD! #wcraleigh
Win a copy of Professional WordPress!
12. To defeat your enemy you
must know your enemy
Type: Nerd Zombies
Speed: Slow
Favorite Body Part: Braaaaaains
13. To defeat your enemy you
must know your enemy
Type: Nazi Zombies
Speed: Fast
Favorite Part: Buttocks
14. To defeat your enemy you
must know your enemy
Type: Baby Zombies
Speed: Crawl
Favorite Part: Fingers
15. To defeat your enemy you
must know your enemy
Type: Kitty Zombies
Speed: Lightning Fast
Favorite Part: Fingers
16. Example:
Drop the below code in your themes functions.php file
<?php
add_action( 'init', 'wc_raleigh_cpt_init' );
function wc_raleigh_cpt_init() {
register_post_type( 'zombies' );
}
?>
18. Example:
Drop the below code in your themes functions.php file
Where is it?
19. Example:
Set the public and label parameters for the custom post type
<?php
add_action( 'init', 'wc_raleigh_cpt_init' );
function wc_raleigh_cpt_init() {
$arrrrgs = array(
'public' => true,
'label' => 'Zombies'
);
register_post_type( 'zombies', $arrrrgs );
}
?>
20. Example:
It’s Alive!
Our new “Zombies” post
type is now visible in the
WP dashboard!
21. Example:
Lets break it down:
<?php
1. Action hook to trigger our function add_action( 'init', 'wc_raleigh_cpt_init' );
2. Execute the register_post_type function wc_raleigh_cpt_init() {
function defining zombies as our
custom post type $arrrrgs = array(
'public' => true,
3. Set the label to Zombies 'label' => 'Zombies'
);
4. Set public to true. By default
public is false which will hide your register_post_type( 'zombies', $arrrrgs );
post type
}
?>
23. Additional Arguments: labels
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_item: The header shown when editing a post.
new_item: Shown in the favorites menu in the admin header.
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.
menu_name – Text used in the WP dashboard menu
Ref: http://codex.wordpress.org/Function_Reference/register_post_type#Parameters
24. Additional Arguments: labels
An array of strings that represent your post type in the WP admin
add_action( 'init', 'wc_raleigh_cpt_init' );
function wc_raleigh_cpt_init() {
$labels = array(
'name' => 'Zombies',
'singular_name' => 'Zombie',
'add_new' => 'Add New Zombie',
'add_new_item' => 'Add New Zombie',
'edit_item' => 'Edit Zombie',
'new_item' => 'New Zombie',
'view_item' => 'View Zombie',
'search_items' => 'Search Zombies',
'not_found' => 'No zombies found',
'not_found_in_trash' => 'No zombies found in Trash',
'menu_name' => 'Zombies'
);
$arrrrgs = array(
'public' => true,
'labels' => $labels
);
register_post_type( 'zombies', $arrrrgs );
}
26. Additional Arguments: 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. Important for
hierarchical post types, so you can select the parent post.
post-formats: Add post formats
27. Additional Arguments: 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' => 'Edit Zombies',
'edit_item' => 'Edit 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,
)
);
28. Additional Arguments: supports
Defines what meta boxes and other fields appear on the edit screen
Only the Title and Publish meta boxes are displayed
31. Additional Arguments: rewrite
Defines the permalink structure of your custom post type posts
slug: The slug to use in your permalink structure
Example: 'rewrite' => array('slug' => 'enemy')
BEFORE
AFTER
TIP: If you receive a 404 after setting a custom rewrite visit Settings > Permalinks
and save your permalink settings to flush the rewrite rules in WordPress
32. Additional Arguments: taxonomies
Add pre-existing taxonomies to your custom post type
Example:
'taxonomies' =>
array( 'post_tag',
'category')
33. Additional Arguments: 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
can_export: Can this post type be exported
show_in_menu: Whether to show the post type in an existing
admin menu
has_archive: Enables post type archives
34. Additional Arguments: show_in_menu
Add the custom post type to an existing menu
'show_in_menu' => 'edit.php?post_type=page'
BEFORE AFTER
35. Additional Arguments: has_archive
Creates a default page to list all entries in a post type
has_archive' => ‘enemies'
http://example.com/enemies/
Now lists zombie posts
Can also create a theme
template named
archive-zombies.php
46. Example:
Drop the below code in your themes functions.php file
<?php
$arrrrgs = array(
'label' => ‘Speed'
);
register_taxonomy( ‘speed', 'zombies', $arrrrgs );
?>
Non-hierarchical Taxonomy
47. Example:
New custom taxonomy is
automatically added to the
Zombies post type menu
The Speed meta box is also
automatically added to the
Zombie edit screen!
49. 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
separate_items_with_commas: The separate items with commas text
add_or_remove_items: The add or remove items text
choose_from_most_used: The choose from most used text
menu_name: The string used for the menu name
52. Additional Arguments: rewrite
Defines the permalink structure for your custom taxonomy
slug: The slug to use in your permalink structure
Example: 'rewrite' => array( 'slug' => ‘quickness' )
BEFORE http://example.com/speed/ripe/
AFTER http://example.com/quickness/ripe/
53. 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 UI for the taxonomy
query_var: whether to be able to query posts using the taxonomy.
show_tagcloud: whether to show a tag cloud in the admin UI
show_in_nav_menus: whether the taxonomy is available for
selection in nav menus
57. Displaying Custom Post Type Content
By default custom post type content will NOT display in the Loop
<?php query_posts( array( 'post_type' => 'zombies' ) ); ?>
Placing the above code directly before the Loop will only display our zombies
58. Displaying Custom Post Type Content
(After)
BEFORE ZOMBIED
<?php query_posts( array( 'post_type' => 'zombies' ) ); ?>
59. Custom Loop
Creating a custom Loop for your post type
<?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; ?>
60. Custom Post Type Functions
Function: get_post_type()
Returns the post type of the content you are viewing
<?php
if (have_posts()) : while (have_posts()) : the_post();
$post_type = get_post_type( get_the_ID() );
if ($post_type == 'zombies') {
echo 'This is a Zombie!';
}
?>
<?php endwhile; ?>
<?php endif; ?>
http://codex.wordpress.org/Function_Reference/get_post_type
61. Custom Post Type Functions
Function: post_type_exists()
Check if a post type exists
if ( post_type_exists( 'zombies' ) ) {
echo 'Zombies Exist!';
}
Function: get_post_types()
List all registered post types in WordPress
$post_types = get_post_types( '','names' );
foreach ( $post_types as $post_type ) {
echo '<p>'. $post_type. '</p>';
}
64. Custom Post Type UI
Easily create custom post types without writing code!
http://wordpress.org/extend/plugins/custom-post-type-ui/
65. Custom Post Type UI
Also easily create custom taxonomies without writing code!
http://wordpress.org/extend/plugins/custom-post-type-ui/
66. Custom Post Type UI
Plugin also gives you the PHP code for custom post types and taxonomies!
http://wordpress.org/extend/plugins/custom-post-type-ui/
67. Custom Post Type and Taxonomy Resources
Related Codex Articles
› http://codex.wordpress.org/Post_Types
› http://codex.wordpress.org/Function_Reference/register_post_type
› http://codex.wordpress.org/Taxonomies
Custom Post Type Articles
› http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress
› http://justintadlock.com/archives/2010/02/02/showing-custom-post-types-on-your-home-
blog-page
› http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/
› http://wpengineer.com/impressions-of-custom-post-type/
› http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/
Custom Taxonomies
› http://justintadlock.com/archives/2009/05/06/custom-taxonomies-in-wordpress-28
› http://justintadlock.com/archives/2009/06/04/using-custom-taxonomies-to-create-a-movie-
database
› http://www.shibashake.com/wordpress-theme/wordpress-custom-taxonomy-input-panels