Surviving the Zombie Apocalypse using Custom Post Types and Taxonomies

6,816 views
6,539 views

Published on

Brad Williams WordCamp Raleigh 2011 presentation on custom post types and taxonomies at WordCamp Raleigh.

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,816
On SlideShare
0
From Embeds
0
Number of Embeds
568
Actions
Shares
0
Downloads
63
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Surviving the Zombie Apocalypse using Custom Post Types and Taxonomies

  1. 1. Surviving the Zombie Apocalypse using Custom Post Types and Taxonomies Brad Williams WebDevStudios.com @williamsba
  2. 2. 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) Who Am I?
  3. 3. <ul><li>How to Kill Zombies </li></ul>Topics
  4. 4. <ul><li>How to Kill Zombies </li></ul><ul><li>Explain Custom Post Types and Taxonomies </li></ul><ul><li>Create Custom Post Types </li></ul><ul><li>Create Custom Taxonomies </li></ul><ul><li>Hooking into WordPress </li></ul>Topics
  5. 5. So What Are Custom Post Types?
  6. 6. So What Are Custom Post Types? Post type refers to the various structured data that is maintained in the WordPress posts table.
  7. 7. Huh?
  8. 8. So What Are Custom Post Types Really? ENGLISH : Custom Post Types allow you to create different types of content in WordPress.
  9. 9. Default WordPress Post Types: <ul><li>Posts </li></ul><ul><li>Pages </li></ul><ul><li>Attachments </li></ul><ul><li>Revisions </li></ul><ul><li>Nav Menus </li></ul>
  10. 10. Custom Post Type Ideas <ul><li>Podcasts </li></ul><ul><li>Movies </li></ul><ul><li>Bars </li></ul><ul><li>Forum </li></ul><ul><li>Quotes </li></ul><ul><li>Videos </li></ul><ul><li>Cars </li></ul><ul><li>House Listings </li></ul><ul><li>Events </li></ul><ul><li>Ticket System </li></ul><ul><li>etc, etc, etc </li></ul>The possibilities are endless!
  11. 11. To defeat your enemy you must know your enemy Tweet: @williamsba CAUTION ZOMBIES AHEAD! #wcraleigh Win a copy of Professional WordPress!
  12. 12. To defeat your enemy you must know your enemy Type: Nerd Zombies Speed: Slow Favorite Body Part: Braaaaaains
  13. 13. To defeat your enemy you must know your enemy Type: Nazi Zombies Speed: Fast Favorite Part: Buttocks
  14. 14. To defeat your enemy you must know your enemy Type: Baby Zombies Speed: Crawl Favorite Part: Fingers
  15. 15. To defeat your enemy you must know your enemy Type: Kitty Zombies Speed: Lightning Fast Favorite Part: Fingers
  16. 16. Example: <?php add_action( 'init', 'wc_raleigh_cpt_init' ); function wc_raleigh_cpt_init() { register_post_type( 'zombies' ); } ?> Drop the below code in your themes functions.php file
  17. 17. Questions? That’s it!
  18. 18. Example: Drop the below code in your themes functions.php file Where is it?
  19. 19. Example: <?php add_action( 'init', 'wc_raleigh_cpt_init' ); function wc_raleigh_cpt_init() { $arrrrgs = array( 'public' => true, 'label' => 'Zombies' ); register_post_type( 'zombies', $arrrrgs ); } ?> Set the public and label parameters for the custom post type
  20. 20. Example: It’s Alive! Our new “Zombies” post type is now visible in the WP dashboard!
  21. 21. Example: <?php add_action( 'init', 'wc_raleigh_cpt_init' ); function wc_raleigh_cpt_init() { $arrrrgs = array( 'public' => true, 'label' => 'Zombies' ); register_post_type( 'zombies', $arrrrgs ); } ?> Lets break it down: 1. Action hook to trigger our function 2. Execute 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
  22. 22. Additional Arguments: labels
  23. 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. 24. Additional Arguments: labels 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 ); } An array of strings that represent your post type in the WP admin
  25. 25. Additional Arguments: labels The Result
  26. 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. 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. 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
  29. 29. Additional Arguments: supports Now lets activate all meta boxes $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, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes', 'post-formats' ) ); register_post_type( 'zombies', $arrrrgs );
  30. 30. Additional Arguments: supports Now all meta boxes are displayed on the Zombie edit screen
  31. 31. Additional Arguments: rewrite Defines the permalink structure of your custom post type posts slug : The slug to use in your permalink structure 'rewrite' => array('slug' => 'enemy') Example: 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. 32. Additional Arguments: taxonomies Add pre-existing taxonomies to your custom post type 'taxonomies' => array( 'post_tag', 'category') Example:
  33. 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. 34. Additional Arguments: show_in_menu Add the custom post type to an existing menu BEFORE AFTER 'show_in_menu' => 'edit.php?post_type=page'
  35. 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
  36. 36. Putting it all together 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, 'rewrite' => array('slug' => 'enemy'), 'taxonomies' => array( 'post_tag', 'category'), 'show_in_menu' => 'edit.php?post_type=page', 'has_archive' => 'enemies', 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes', 'post-formats' ) ); register_post_type( 'zombies', $arrrrgs ); }
  37. 37. Now that we know the enemy we must kill the enemy
  38. 38. Zombie Weapons Type: Machete Nickname: Butter Cutter Gore Factor: Moderate Kill Speed: Swift
  39. 39. Zombie Weapons Type: Spiked Bat Nickname: Pokie Gore Factor: Gore-cano Kill Speed: Slow
  40. 40. Zombie Weapons Type: Chainsaw Nickname: Old Faithful Gore Factor: Over the Top Kill Speed: Slow and Steady
  41. 41. Zombie Weapons Type: All in One Zombie Killer Nickname: The Torbert Gore Factor: Messy or Clean. You Choose! Kill Speed: Instant
  42. 42. Create another custom post type for Weapons $labels = array( 'name' => 'Weapons', 'singular_name' => 'Weapon', 'add_new' => 'Add New Weapon', 'add_new_item' => 'Add New Weapon', 'edit_item' => 'Edit Weapon', 'new_item' => 'New Weapon', 'view_item' => 'View Weapon', 'search_items' => 'Search Weapons', 'not_found' => 'No weapons found', 'not_found_in_trash' => 'No weapons found in Trash', 'menu_name' => 'Weapons' ); $arrrrgs = array( 'public' => true, 'labels' => $labels, 'rewrite' => array('slug' => 'weapon'), 'has_archive' => 'weapons', 'supports' => array( 'title', 'editor', 'thumbnail' ) ); register_post_type( 'weapons', $arrrrgs ); Weapons Custom Post Type
  43. 43. So what are Taxonomies? ENGLISH : Taxonomies are a way to group similar items together
  44. 44. Default WordPress Taxonomies: <ul><li>Category </li></ul><ul><li>Tag </li></ul><ul><li>Link Category </li></ul>
  45. 45. Example Time! Tweet: @williamsba ZOMBIES IN AREA! RUN #wcraleigh Win a copy of Professional WordPress!
  46. 46. Example: <?php $arrrrgs = array( 'label' => ‘Speed' ); register_taxonomy( ‘speed', 'zombies', $arrrrgs ); ?> Drop the below code in your themes functions.php file Non-hierarchical Taxonomy
  47. 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!
  48. 48. Additional Arguments: hierarchical Give the custom taxonomy hierarchy BEFORE AFTER ‘ hierarchical' => true
  49. 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
  50. 50. Additional Arguments: labels $labels = array( 'name' => 'Speed', 'singular_name' => 'Speed', 'search_items' => 'Search Speeds', 'all_items' => 'All Speeds', 'parent_item' => 'Parent Speed', 'parent_item_colon' => 'Parent Speed:', 'edit_item' => 'Edit Speed', 'update_item' => 'Update Speed', 'add_new_item' => 'Add New Speed', 'new_item_name' => 'New Genre Speed', 'menu_name' => 'Speed' ); $arrrrgs = array( 'hierarchical' => false, 'labels' => $labels ); register_taxonomy( 'speed', 'zombies', $arrrrgs ); An array of strings that represent your taxonomy in the WP admin
  51. 51. Additional Arguments: labels The Result
  52. 52. Additional Arguments: rewrite Defines the permalink structure for your custom taxonomy slug : The slug to use in your permalink structure 'rewrite' => array( 'slug' => ‘quickness' ) Example: BEFORE AFTER http://example.com/speed/ripe/ http://example.com/quickness/ripe/
  53. 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
  54. 54. Putting it all together $labels = array( 'name' => 'Speed', 'singular_name' => 'Speed', 'search_items' => 'Search Speeds', 'all_items' => 'All Speeds', 'parent_item' => 'Parent Speed', 'parent_item_colon' => 'Parent Speed:', 'edit_item' => 'Edit Speed', 'update_item' => 'Update Speed', 'add_new_item' => 'Add New Speed', 'new_item_name' => 'New Genre Speed', 'menu_name' => 'Speed' ); $arrrrgs = array( 'hierarchical' => false, 'labels' => $labels ); register_taxonomy( 'speed', 'zombies', $arrrrgs );
  55. 56. Displaying in WordPress #protip
  56. 57. 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
  57. 58. Displaying Custom Post Type Content <?php query_posts( array( 'post_type' => 'zombies' ) ); ?> BEFORE ZOMBIED (After)
  58. 59. 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=&quot;' . get_permalink() . '&quot; >', '</a></h2>' ); ?> <div class=&quot;entry-content&quot;> <?php the_content(); ?> </div> <?php endwhile; ?> Creating a custom Loop for your post type
  59. 60. <?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; ?> 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
  60. 61. if ( post_type_exists( 'zombies' ) ) { echo 'Zombies Exist!'; } Function: post_type_exists() Check if a post type exists Custom Post Type Functions $post_types = get_post_types( '','names' ); foreach ( $post_types as $post_type ) { echo '<p>'. $post_type. '</p>'; } Function: get_post_types() List all registered post types in WordPress
  61. 62. <?php echo get_the_term_list( $post->ID, speed', ‘Speed: ', ', ', '' ); ?> Function: get_the_term_list() Display speed taxonomy for our zombies Custom Taxonomy Functions http://codex.wordpress.org/Function_Reference/get_the_term_list
  62. 63. Recommended Plugin
  63. 64. Custom Post Type UI http://wordpress.org/extend/plugins/custom-post-type-ui/ Easily create custom post types without writing code!
  64. 65. Custom Post Type UI http://wordpress.org/extend/plugins/custom-post-type-ui/ Also easily create custom taxonomies without writing code!
  65. 66. Custom Post Type UI http://wordpress.org/extend/plugins/custom-post-type-ui/ Plugin also gives you the PHP code for custom post types and taxonomies!
  66. 67. <ul><li>Related Codex Articles </li></ul><ul><ul><li>http://codex.wordpress.org/Post_Types </li></ul></ul><ul><ul><li>http://codex.wordpress.org/Function_Reference/register_post_type </li></ul></ul><ul><ul><li>http://codex.wordpress.org/Taxonomies </li></ul></ul><ul><li>Custom Post Type Articles </li></ul><ul><ul><li>http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress </li></ul></ul><ul><ul><li>http://justintadlock.com/archives/2010/02/02/showing-custom-post-types-on-your-home-blog-page </li></ul></ul><ul><ul><li>http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/ </li></ul></ul><ul><ul><li>http://wpengineer.com/impressions-of-custom-post-type/ </li></ul></ul><ul><ul><li>http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/ </li></ul></ul><ul><li>Custom Taxonomies </li></ul><ul><ul><li>http://justintadlock.com/archives/2009/05/06/custom-taxonomies-in-wordpress-28 </li></ul></ul><ul><ul><li>http://justintadlock.com/archives/2009/06/04/using-custom-taxonomies-to-create-a-movie-database </li></ul></ul><ul><ul><li>http://www.shibashake.com/wordpress-theme/wordpress-custom-taxonomy-input-panels </li></ul></ul>Custom Post Type and Taxonomy Resources
  67. 68. Brad Williams [email_address] Blog: strangework.com Twitter: @williamsba IRC: WDS-Brad Contact http://bit.ly/pro-wp http://amzn.to/plugindevbook

×