• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Surviving the Zombie Apocalypse using Custom Post Types and Taxonomies
 

Surviving the Zombie Apocalypse using Custom Post Types and Taxonomies

on

  • 5,807 views

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

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

Statistics

Views

Total Views
5,807
Views on SlideShare
5,242
Embed Views
565

Actions

Likes
7
Downloads
55
Comments
0

4 Embeds 565

http://ca274.beekeeperdev.com 442
http://adesignjourney.com 121
http://docs.wpnet.technion.ac.il 1
http://www.twylah.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Surviving the Zombie Apocalypse using Custom Post Types and Taxonomies Surviving the Zombie Apocalypse using Custom Post Types and Taxonomies Presentation Transcript

    • Surviving the Zombie Apocalypse using Custom Post Types and Taxonomies Brad Williams WebDevStudios.com @williamsba
    • 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?
      • How to Kill Zombies
      Topics
      • How to Kill Zombies
      • Explain Custom Post Types and Taxonomies
      • Create Custom Post Types
      • Create Custom Taxonomies
      • Hooking into WordPress
      Topics
    • So What Are Custom Post Types?
    • So What Are Custom Post Types? Post type refers to the various structured data that is maintained in the WordPress posts table.
    • Huh?
    • So What Are 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
    • Custom Post Type Ideas
      • Podcasts
      • Movies
      • Bars
      • Forum
      • Quotes
      • Videos
      • Cars
      • House Listings
      • Events
      • Ticket System
      • etc, etc, etc
      The possibilities are endless!
    • To defeat your enemy you must know your enemy Tweet: @williamsba CAUTION ZOMBIES AHEAD! #wcraleigh Win a copy of Professional WordPress!
    • To defeat your enemy you must know your enemy Type: Nerd Zombies Speed: Slow Favorite Body Part: Braaaaaains
    • To defeat your enemy you must know your enemy Type: Nazi Zombies Speed: Fast Favorite Part: Buttocks
    • To defeat your enemy you must know your enemy Type: Baby Zombies Speed: Crawl Favorite Part: Fingers
    • To defeat your enemy you must know your enemy Type: Kitty Zombies Speed: Lightning Fast Favorite Part: Fingers
    • 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
    • Questions? That’s it!
    • Example: Drop the below code in your themes functions.php file Where is it?
    • 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
    • Example: It’s Alive! Our new “Zombies” post type is now visible in the WP dashboard!
    • 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
    • Additional Arguments: labels
    • 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
    • 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
    • Additional Arguments: labels The Result
    • 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
    • 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, ) );
    • Additional Arguments: supports Defines what meta boxes and other fields appear on the edit screen Only the Title and Publish meta boxes are displayed
    • 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 );
    • Additional Arguments: supports Now all meta boxes are displayed on the Zombie edit screen
    • 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
    • Additional Arguments: taxonomies Add pre-existing taxonomies to your custom post type 'taxonomies' => array( 'post_tag', 'category') Example:
    • 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
    • Additional Arguments: show_in_menu Add the custom post type to an existing menu BEFORE AFTER 'show_in_menu' => 'edit.php?post_type=page'
    • 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
    • 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 ); }
    • Now that we know the enemy we must kill the enemy
    • Zombie Weapons Type: Machete Nickname: Butter Cutter Gore Factor: Moderate Kill Speed: Swift
    • Zombie Weapons Type: Spiked Bat Nickname: Pokie Gore Factor: Gore-cano Kill Speed: Slow
    • Zombie Weapons Type: Chainsaw Nickname: Old Faithful Gore Factor: Over the Top Kill Speed: Slow and Steady
    • Zombie Weapons Type: All in One Zombie Killer Nickname: The Torbert Gore Factor: Messy or Clean. You Choose! Kill Speed: Instant
    • 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
    • So what are Taxonomies? ENGLISH : Taxonomies are a way to group similar items together
    • Default WordPress Taxonomies:
      • Category
      • Tag
      • Link Category
    • Example Time! Tweet: @williamsba ZOMBIES IN AREA! RUN #wcraleigh Win a copy of Professional WordPress!
    • Example: <?php $arrrrgs = array( 'label' => ‘Speed' ); register_taxonomy( ‘speed', 'zombies', $arrrrgs ); ?> Drop the below code in your themes functions.php file Non-hierarchical Taxonomy
    • 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!
    • Additional Arguments: hierarchical Give the custom taxonomy hierarchy BEFORE AFTER ‘ hierarchical' => true
    • 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
    • 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
    • Additional Arguments: labels The Result
    • 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/
    • 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
    • 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 );
    •  
    • 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' ) ); ?> BEFORE ZOMBIED (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=&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
    • <?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
    • 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
    • <?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
    • Recommended Plugin
    • Custom Post Type UI http://wordpress.org/extend/plugins/custom-post-type-ui/ Easily create custom post types without writing code!
    • Custom Post Type UI http://wordpress.org/extend/plugins/custom-post-type-ui/ Also easily create custom taxonomies without writing code!
    • 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!
      • 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
      Custom Post Type and Taxonomy Resources
    • Brad Williams [email_address] Blog: strangework.com Twitter: @williamsba IRC: WDS-Brad Contact http://bit.ly/pro-wp http://amzn.to/plugindevbook