SlideShare a Scribd company logo
DEMYSTIFYING
CUSTOM POST
TYPES &
TAXONOMIES
Tracey Kemp
@dogshindleg
➡ Registering Custom Post Types
  and Taxonomies

➡ A plugin that can help

➡ Displaying content from custom
  post types and taxonomies

➡ Resources
FINAL RESULT
A record label site with
artists and their releases.
PLANNING
What will be a custom post type and
what will be a taxonomy?

Custom Post Type       Taxonomy    Custom Post Type              Taxonomy               Taxonomy

Artist                 Location    Release                       Artist                 Year

The Drones             VIC         Here Come The Lies            The Drones             2002

The Kill Devil Hills   WA          Wait Long By The River        The Drones             2005

Midget                 NSW / QLD   Gala Mill                     The Drones             2006

Front End Loader       NSW         Havilah                       The Drones             2008

Dan Kelly              VIC         Heathen Songs                 The Kill Devil Hills   2004

                                   The Drought                   The Kill Devil Hills   2006

                                   Man, You Should Explode       The Kill Devil Hills   2010

                                   Vagus Wandering               Midget                 1994

                                   The Toggle Switch             Midget                 1997

                                   Total Abandonment Of Better   Midget                 1998
                                   Understanding
REGISTER
CUSTOM
POST
TYPES
REGISTER   function register_custom_post_types() {
                // register post types here
CUSTOM
           }
POST
           add_action(‘init’, ‘register_custom_post_types’);
TYPES
function register_custom_post_types() {
                register_post_type(
                      ‘artists’,
                             array(
                            ‘labels’ => array(
REGISTER                          ‘name’ => _x(‘Artists’, ‘post type general name’),
                                  ‘singular_name’ => __( ‘Artist’, ‘taxonomy singular name’ ),
ARTISTS                           ‘all_items’ => __( ‘All Artists’ ),
                                  ‘edit_item’ => __( ‘Edit Artist’ ),
                                  ‘add_new_item’ => __( ‘Add New Artist’ ),
                                  ‘new_item_name’ => __( ‘New Artist’ ),
                             ),
                      ‘public’ => true,
                      ‘show_ui’ => true,
                      ‘hierarchical’ => true,
                      ‘supports’ => array (‘title’,‘editor’, ‘thumbnail’)
                      )
                );
           }

           add_action(‘init’, ‘register_custom_post_types’);
function register_custom_post_types() {
                  register_post_type(
                          ‘artists’,
                                   array(
                                   ‘labels’ => array(
                                           ‘name’ => _x(‘Artists’, ‘post type general name’),
REGISTER                                   ‘singular_name’ => __( ‘Artist’, ‘taxonomy singular name’ ),
                                           ‘all_items’ => __( ‘All Artists’ ),
                                           ‘edit_item’ => __( ‘Edit Artist’ ),
ARTISTS                                    ‘add_new_item’ => __( ‘Add New Artist’ ),
                                           ‘new_item_name’ => __( ‘New Artist’ ),
                                   ),
                          ‘public’ => true,
                          ‘show_ui’ => true,
                          ‘hierarchical’ => true,
                          ‘supports’ => array (‘title’,‘editor’, ‘thumbnail’)
                          )
                  );




REGISTER
RELEASES


           }

           add_action(‘init’, ‘register_custom_post_types’);
function register_custom_post_types() {
                  register_post_type(
                          ‘artists’,
                                   array(
                                   ‘labels’ => array(
                                           ‘name’ => _x(‘Artists’, ‘post type general name’),
REGISTER                                   ‘singular_name’ => __( ‘Artist’, ‘taxonomy singular name’ ),
                                           ‘all_items’ => __( ‘All Artists’ ),
                                           ‘edit_item’ => __( ‘Edit Artist’ ),
ARTISTS                                    ‘add_new_item’ => __( ‘Add New Artist’ ),
                                           ‘new_item_name’ => __( ‘New Artist’ ),
                                   ),
                          ‘public’ => true,
                          ‘show_ui’ => true,
                          ‘hierarchical’ => true,
                          ‘supports’ => array (‘title’,‘editor’, ‘thumbnail’)
                          )
                  );
                  register_post_type(
                          ‘releases’,
                                   array(
                                   ‘labels’ => array(
                                           ‘name’ => _x(‘Releases’, ‘post type general name’),
REGISTER                                   ‘singular_name’ => __( ‘Release’, ‘taxonomy singular name’ ),
                                           ‘all_items’ => __( ‘All Releases’ ),

RELEASES                                   ‘edit_item’ => __( ‘Edit Release’ ),
                                           ‘add_new_item’ => __( ‘Add New Release’ ),
                                           ‘new_item_name’ => __( ‘New Release’ ),
                                   ),
                          ‘public’ => true,
                          ‘show_ui’ => true,
                          ‘hierarchical’ => true,
                          ‘supports’ => array (‘title’, ‘editor’, ‘thumbnail’)
                          )
                  );
           }

           add_action(‘init’, ‘register_custom_post_types’);
function register_custom_post_types() {
                  register_post_type(
                          ‘artists’,
                                   array(
                                   ‘labels’ => array(
                                           ‘name’ => _x(‘Artists’, ‘post type general name’),
REGISTER                                   ‘singular_name’ => __( ‘Artist’, ‘taxonomy singular name’ ),
                                           ‘all_items’ => __( ‘All Artists’ ),
                                           ‘edit_item’ => __( ‘Edit Artist’ ),
ARTISTS                                    ‘add_new_item’ => __( ‘Add New Artist’ ),
                                           ‘new_item_name’ => __( ‘New Artist’ ),
                                   ),
                          ‘public’ => true,
                          ‘show_ui’ => true,
                          ‘hierarchical’ => true,
                          ‘supports’ => array (‘title’,‘editor’, ‘thumbnail’)
                          )
                  );
                  register_post_type(
                          ‘releases’,
                                   array(
                                   ‘labels’ => array(
                                           ‘name’ => _x(‘Releases’, ‘post type general name’),
REGISTER                                   ‘singular_name’ => __( ‘Release’, ‘taxonomy singular name’ ),
                                           ‘all_items’ => __( ‘All Releases’ ),

RELEASES                                   ‘edit_item’ => __( ‘Edit Release’ ),
                                           ‘add_new_item’ => __( ‘Add New Release’ ),
                                           ‘new_item_name’ => __( ‘New Release’ ),
                                   ),
                          ‘public’ => true,
                          ‘show_ui’ => true,
                          ‘hierarchical’ => true,
                          ‘supports’ => array (‘title’, ‘editor’, ‘thumbnail’)
                          )
                  );
           }

           add_action(‘init’, ‘register_custom_post_types’);
REGISTER
TAXONOMIES
REGISTER   function register_taxonomies() {

TAXO            // register post types here

NOMIES     }

           add_action(‘init’, ‘register_taxonomies’, 0);
function register_taxonomies() {
                $labels = array(
                   ‘name’ => _x( ‘Location’, ‘taxonomy general name’ ),
                   ‘singular_name’ => _x( ‘Location’, ‘taxonomy singular name’ ),
REGISTER           ‘all_items’ => __( ‘All Locations’ ),
                   ‘edit_item’ => __( ‘Edit Location’ ),
LOCATION           ‘add_new_item’ => __( ‘Add New Location’ ),
                   ‘menu_name’ => __( ‘Locations’ ),
                );
                register_taxonomy(
                   ‘locations’,
                   array(‘artists’), // post-type(s)
                   array(
                       ‘hierarchical’ => true,
                       ‘labels’ => $labels,
                       ‘show_ui’ => true, )
                );
           }

           add_action(‘init’, ‘register_taxonomies’, 0);
function register_taxonomies() {
                   $labels = array(
                        ‘name’ => _x( ‘Location’, ‘taxonomy general name’ ),
                        ‘singular_name’ => _x( ‘Location’, ‘taxonomy singular name’ ),
                        ‘all_items’ => __( ‘All Locations’ ),
                        ‘edit_item’ => __( ‘Edit Location’ ),

REGISTER                ‘add_new_item’ => __( ‘Add New Location’ ),
                        ‘menu_name’ => __( ‘Locations’ ),
                   );
LOCATION           register_taxonomy(
                        ‘locations’,
                        array(‘artists’), // post-type(s)
                        array(
                              ‘hierarchical’ => true,
                              ‘labels’ => $labels,
                              ‘show_ui’ => true, )
                   );




REGISTER
RELEASE
YEAR
           }

           add_action(‘init’, ‘register_taxonomies’, 0);
function register_taxonomies() {
                   $labels = array(
                        ‘name’ => _x( ‘Location’, ‘taxonomy general name’ ),
                        ‘singular_name’ => _x( ‘Location’, ‘taxonomy singular name’ ),
                        ‘all_items’ => __( ‘All Locations’ ),
                        ‘edit_item’ => __( ‘Edit Location’ ),

REGISTER                ‘add_new_item’ => __( ‘Add New Location’ ),
                        ‘menu_name’ => __( ‘Locations’ ),
                   );
LOCATION           register_taxonomy(
                        ‘locations’,
                        array(‘artists’), // post-type(s)
                        array(
                              ‘hierarchical’ => true,
                              ‘labels’ => $labels,
                              ‘show_ui’ => true, )
                   );
                   $labels = array(
                        ‘name’ => _x( ‘Release Year’, ‘taxonomy general name’ ),
                        ‘singular_name’ => _x( ‘Release Year’, ‘taxonomy singular name’ ),
                        ‘all_items’ => __( ‘All Release Years’ ),
                        ‘edit_item’ => __( ‘Edit Release Year’ ),
                        ‘add_new_item’ => __( ‘Add New Release Year’ ),
                        ‘menu_name’ => __( ‘Release Years’ ),

REGISTER           );
                   register_taxonomy(
                        ‘release-year’,
RELEASE                 array(‘releases’), // post-type(s)
                        array(

YEAR                          ‘hierarchical’ => true,
                              ‘labels’ => $labels,
                              ‘show_ui’ => true, )
                   );
           }

           add_action(‘init’, ‘register_taxonomies’, 0);
function register_taxonomies() {
                   $labels = array(
                        ‘name’ => _x( ‘Location’, ‘taxonomy general name’ ),
                        ‘singular_name’ => _x( ‘Location’, ‘taxonomy singular name’ ),
                        ‘all_items’ => __( ‘All Locations’ ),
                        ‘edit_item’ => __( ‘Edit Location’ ),

REGISTER                ‘add_new_item’ => __( ‘Add New Location’ ),
                        ‘menu_name’ => __( ‘Locations’ ),
                   );
LOCATION           register_taxonomy(
                        ‘locations’,
                        array(‘artists’), // post-type(s)
                        array(
                              ‘hierarchical’ => true,
                              ‘labels’ => $labels,
                              ‘show_ui’ => true, )
                   );
                   $labels = array(
                        ‘name’ => _x( ‘Release Year’, ‘taxonomy general name’ ),
                        ‘singular_name’ => _x( ‘Release Year’, ‘taxonomy singular name’ ),
                        ‘all_items’ => __( ‘All Release Years’ ),
                        ‘edit_item’ => __( ‘Edit Release Year’ ),
                        ‘add_new_item’ => __( ‘Add New Release Year’ ),
                        ‘menu_name’ => __( ‘Release Years’ ),

REGISTER           );
                   register_taxonomy(
                        ‘release-year’,
RELEASE                 array(‘releases’), // post-type(s)
                        array(

YEAR                          ‘hierarchical’ => true,
                              ‘labels’ => $labels,
                              ‘show_ui’ => true, )
                   );
           }

           add_action(‘init’, ‘register_taxonomies’, 0);
USING A
CUSTOM POST
TYPE AS A
TAXONOMY
DISPLAY
ARTISTS
DISPLAY
ARTISTS
<?php //artists posts
$artist_args=array(
     'post_type' => 'artists',
     'posts_per_page' => -1,
);
$artist_query = null;
$artist_query = new WP_Query($artist_args);
if( $artist_query->have_posts() ) {
  while ($artist_query->have_posts()) : $artist_query->the_post(); ?>

   <article>
      <?php the_post_thumbnail(); ?>
      <h2><?php the_title(); ?></h2>
      <?php the_excerpt(); ?>
   </article>

<?php endwhile; } wp_reset_query(); ?>
DISPLAY ARTISTS
WITH LOCATIONS
<?php //artists posts
$artist_args=array(
     'post_type' => 'artists',
     'posts_per_page' => -1,
);
$artist_query = null;
$artist_query = new WP_Query($artist_args);
if( $artist_query->have_posts() ) {
  while ($artist_query->have_posts()) : $artist_query->the_post(); ?>

   <article>
      <?php the_post_thumbnail(); ?>
      <h2><?php the_title(); ?></h2>
      <?php echo get_the_term_list( $post->ID, ‘locations’,
      ‘From: ’, ‘ / ‘, ‘’ ); ?>
      <?php the_excerpt(); ?>
   </article>

<?php endwhile; } wp_reset_query(); ?>
DISPLAY ARTISTS
WITH LOCATIONS
<?php //artists posts
$artist_args=array(
     'post_type' => 'artists',
     'posts_per_page' => -1,
);
     <?php echo get_the_term_list( $id, $taxonomy, $before, $sep, $after ) ?>
$artist_query = null;
$artist_query = new WP_Query($artist_args);
     <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?>
if( $artist_query->have_posts() ) {
  while ($artist_query->have_posts()) : $artist_query->the_post(); ?>

   <article>
      <?php the_post_thumbnail(); ?>
      <h2><?php the_title(); ?></h2>
      <?php echo get_the_term_list( $post->ID, ‘locations’,
      ‘From: ’, ‘ / ‘, ‘’ ); ?>
      <?php the_excerpt(); ?>
   </article>

<?php endwhile; } wp_reset_query(); ?>
DISPLAY
RELEASES
<?php //releases posts
$release_args=array(
     'post_type' => 'releases',
     'posts_per_page' => -1,
);
$release_query = null;
$release_query = new WP_Query($release_args);
if( $release_query->have_posts() ) {
  while ($release_query->have_posts()) : $release_query->the_post(); ?>

   <article>
      <?php the_post_thumbnail(); ?>
      <?php the_title(); ?>
      <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ?>
   </article>

<?php endwhile; } wp_reset_query(); ?>
DISPLAY
RELEASES
<?php //releases posts
$release_args=array(
     'post_type' => 'releases',
     'posts_per_page' => -1,
);
$release_query = null;
$release_query = new WP_Query($release_args);
if( $release_query->have_posts() ) {
  while ($release_query->have_posts()) : $release_query->the_post(); ?>

   <article>
      <?php the_post_thumbnail(); ?>
      <?php the_title(); ?>
      <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ?>
   </article>

<?php endwhile; } wp_reset_query(); ?>
HOW DO WE SHOW ARTISTS WITH RELEASES?
<?php //artists posts
          $artist_args=array(
               'post_type' => 'artists',
DISPLAY        'posts_per_page' => -1,
ARTISTS   );
          $artist_query = null;
          $artist_query = new WP_Query($artist_args);
          if( $artist_query->have_posts() ) {
            while ($artist_query->have_posts()) : $artist_query->the_post(); ?>

             <article>
               <?php the_post_thumbnail(); ?>
               <h2><?php the_title(); ?></h2>
               <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?>
               <?php the_excerpt(); ?>

                //insert releases here

             </article>

          <?php endwhile; } wp_reset_query(); ?>
while ($artist_query->have_posts()) : $artist_query->the_post(); ?>


DISPLAY     <article>
              <?php the_post_thumbnail(); ?>
ARTISTS       <h2><?php the_title(); ?></h2>
              <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?>
              <?php the_excerpt(); ?>

                    <?php //releases posts
                    $release_args=array(
                         'post_type' => 'releases',
                         'posts_per_page' => -1,
DISPLAY             );
                    $release_query = null;
RELEASES            $release_query = new WP_Query($release_args);
                    if( $release_query->have_posts() ) {
                      while ($release_query->have_posts()) : $release_query->the_post(); ?>

                         <article>
                            <?php the_post_thumbnail(); ?>
                            <?php the_title(); ?>
                            <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ?
                         </article>

                    <?php endwhile; } wp_reset_query(); ?>
            </article>
while ($artist_query->have_posts()) : $artist_query->the_post(); ?>


DISPLAY             <article>
                      <?php the_post_thumbnail(); ?>
ARTISTS               <h2><?php the_title(); ?></h2>
                      <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?>
                      <?php the_excerpt(); ?>

GET ARTIST TITLE
                            <?php //releases posts
                            $release_args=array(
                                 'post_type' => 'releases',
                                 'posts_per_page' => -1,
                            );
DISPLAY                     $release_query = null;
                            $release_query = new WP_Query($release_args);
RELEASES                    if( $release_query->have_posts() ) {
                              while ($release_query->have_posts()) : $release_query->the_post(); ?>

                               <article>
                                  <?php the_post_thumbnail(); ?>
                                  <?php the_title(); ?>
                                  <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ?
                               </article>
while ($artist_query->have_posts()) : $artist_query->the_post(); ?>


DISPLAY             <article>
                      <?php the_post_thumbnail(); ?>
ARTISTS               <h2><?php the_title(); ?></h2>
                      <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?>
                      <?php the_excerpt(); ?>

GET ARTIST TITLE            <?php $tax_artist = get_the_title(); ?>

                            <?php //releases posts
                            $release_args=array(
                                 'post_type' => 'releases',
                                 'posts_per_page' => -1,
                            );
DISPLAY                     $release_query = null;
                            $release_query = new WP_Query($release_args);
RELEASES                    if( $release_query->have_posts() ) {
                              while ($release_query->have_posts()) : $release_query->the_post(); ?>

                               <article>
                                  <?php the_post_thumbnail(); ?>
                                  <?php the_title(); ?>
                                  <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ?
                               </article>
while ($artist_query->have_posts()) : $artist_query->the_post(); ?>


DISPLAY             <article>
                      <?php the_post_thumbnail(); ?>
ARTISTS               <h2><?php the_title(); ?></h2>
                      <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?>
                      <?php the_excerpt(); ?>

GET ARTIST TITLE            <?php $tax_artist = get_the_title(); ?>

                            <?php //releases posts
                            $release_args=array(
                                 'post_type' => 'releases',
$taxonomy => $term               'artists' => $tax_artist,
                                 'posts_per_page' => -1,
                            );
                            $release_query = null;
                            $release_query = new WP_Query($release_args);
                            if( $release_query->have_posts() ) {
DISPLAY                       while ($release_query->have_posts()) : $release_query->the_post(); ?>
RELEASES                       <article>
                                  <?php the_post_thumbnail(); ?>
                                  <?php the_title(); ?>
                                  <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ?
                               </article>
<?php //artists posts
                   $artist_args=array(
                         'post_type' => 'artists',
START              );
                         'posts_per_page' => -1,


ARTISTS            $artist_query = null;
                   $artist_query = new WP_Query($artist_args);
QUERY              if( $artist_query->have_posts() ) {
                     while ($artist_query->have_posts()) : $artist_query->the_post(); ?>

                       <article>
                            <?php the_post_thumbnail(); ?>
                            <h2><?php the_title(); ?></h2>
                            <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?>
                            <?php the_excerpt(); ?>

GET ARTIST TITLE                    <?php $tax_artist = get_the_title(); ?>
                                    <?php //releases posts
                                    $release_args=array(
START RELEASES QUERY                      'post_type' => 'releases',
$taxonomy => $term                        'artists' => $tax_artist,
                                          'posts_per_page' => -1,
                                    );
                                    $release_query = null;
                                    $release_query = new WP_Query($release_args);
                                    if( $release_query->have_posts() ) {
                                      while ($release_query->have_posts()) : $release_query->the_post(); ?>

                                        <article>
                                             <?php the_post_thumbnail(); ?>
                                             <?php the_title(); ?>
                                             <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ?>
                                        </article>
CLOSE RELEASES                      <?php endwhile; } wp_reset_query(); ?>

CLOSE                  </article>

ARTISTS            <?php endwhile; } wp_reset_query(); ?>
RESOURCES
WordPress Codex & Forums
http://codex.wordpress.org/
http://wordpress.org/support/

Register Custom Post Types
http://codex.wordpress.org/Function_Reference/register_post_type

Register Taxonomies
http://codex.wordpress.org/Function_Reference/register_taxonomy

Query Posts
http://codex.wordpress.org/Function_Reference/query_posts

The Loop
http://codex.wordpress.org/The_Loop
RESOURCES
Plugins
CPT-onomies: Using Custom Post Types as Taxonomies
http://wordpress.org/extend/plugins/cpt-onomies/
DEMYSTIFYING
CUSTOM POST
TYPES &
TAXONOMIES
Tracey Kemp
@dogshindleg


Full code samples and explanations
dogshindleg.com

More Related Content

More from WordCamp Sydney

TurboPress: The High Performance Guide to WordPress - Jeff Waugh - WordCamp S...
TurboPress: The High Performance Guide to WordPress - Jeff Waugh - WordCamp S...TurboPress: The High Performance Guide to WordPress - Jeff Waugh - WordCamp S...
TurboPress: The High Performance Guide to WordPress - Jeff Waugh - WordCamp S...
WordCamp Sydney
 
Responsive WordPress - Jordan Gillman - WordCamp Sydney 2012
Responsive WordPress - Jordan Gillman - WordCamp Sydney 2012Responsive WordPress - Jordan Gillman - WordCamp Sydney 2012
Responsive WordPress - Jordan Gillman - WordCamp Sydney 2012
WordCamp Sydney
 
The Power of Your Story Through WordPress and Social Media - Kimanzi Constabl...
The Power of Your Story Through WordPress and Social Media - Kimanzi Constabl...The Power of Your Story Through WordPress and Social Media - Kimanzi Constabl...
The Power of Your Story Through WordPress and Social Media - Kimanzi Constabl...
WordCamp Sydney
 
Siloing your Site for SEO Success - Stephen Cronin - WordCamp Sydney 2012
Siloing your Site for SEO Success - Stephen Cronin - WordCamp Sydney 2012Siloing your Site for SEO Success - Stephen Cronin - WordCamp Sydney 2012
Siloing your Site for SEO Success - Stephen Cronin - WordCamp Sydney 2012
WordCamp Sydney
 
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
WordCamp Sydney
 
The Plugin Spectactular - Tony Cosentino - WordCamp Sydney 2012
The Plugin Spectactular - Tony Cosentino - WordCamp Sydney 2012The Plugin Spectactular - Tony Cosentino - WordCamp Sydney 2012
The Plugin Spectactular - Tony Cosentino - WordCamp Sydney 2012
WordCamp Sydney
 
Optimising SEO for WordPress - Lisa Davis - WordCamp Sydney 2012
Optimising SEO for WordPress - Lisa Davis - WordCamp Sydney 2012Optimising SEO for WordPress - Lisa Davis - WordCamp Sydney 2012
Optimising SEO for WordPress - Lisa Davis - WordCamp Sydney 2012
WordCamp Sydney
 
Word to the Future - Brent Shepherd - WordCamp Sydney 2012
Word to the Future - Brent Shepherd - WordCamp Sydney 2012Word to the Future - Brent Shepherd - WordCamp Sydney 2012
Word to the Future - Brent Shepherd - WordCamp Sydney 2012
WordCamp Sydney
 
Securing your WordPress Website - Vlad Lasky - WordCamp Sydney 2012
Securing your WordPress Website - Vlad Lasky - WordCamp Sydney 2012Securing your WordPress Website - Vlad Lasky - WordCamp Sydney 2012
Securing your WordPress Website - Vlad Lasky - WordCamp Sydney 2012
WordCamp Sydney
 
There's More than 1 Way to Skin a WordPress Theme - Lachlan MacPherson - Word...
There's More than 1 Way to Skin a WordPress Theme - Lachlan MacPherson - Word...There's More than 1 Way to Skin a WordPress Theme - Lachlan MacPherson - Word...
There's More than 1 Way to Skin a WordPress Theme - Lachlan MacPherson - Word...
WordCamp Sydney
 
WordPress for Noobs - Wil Brown - WordCamp Sydney 2012
WordPress for Noobs - Wil Brown - WordCamp Sydney 2012WordPress for Noobs - Wil Brown - WordCamp Sydney 2012
WordPress for Noobs - Wil Brown - WordCamp Sydney 2012
WordCamp Sydney
 
Getting to Grips with Firebug - Anthony Hortin - WordCamp Sydney
Getting to Grips with Firebug - Anthony Hortin - WordCamp SydneyGetting to Grips with Firebug - Anthony Hortin - WordCamp Sydney
Getting to Grips with Firebug - Anthony Hortin - WordCamp Sydney
WordCamp Sydney
 

More from WordCamp Sydney (12)

TurboPress: The High Performance Guide to WordPress - Jeff Waugh - WordCamp S...
TurboPress: The High Performance Guide to WordPress - Jeff Waugh - WordCamp S...TurboPress: The High Performance Guide to WordPress - Jeff Waugh - WordCamp S...
TurboPress: The High Performance Guide to WordPress - Jeff Waugh - WordCamp S...
 
Responsive WordPress - Jordan Gillman - WordCamp Sydney 2012
Responsive WordPress - Jordan Gillman - WordCamp Sydney 2012Responsive WordPress - Jordan Gillman - WordCamp Sydney 2012
Responsive WordPress - Jordan Gillman - WordCamp Sydney 2012
 
The Power of Your Story Through WordPress and Social Media - Kimanzi Constabl...
The Power of Your Story Through WordPress and Social Media - Kimanzi Constabl...The Power of Your Story Through WordPress and Social Media - Kimanzi Constabl...
The Power of Your Story Through WordPress and Social Media - Kimanzi Constabl...
 
Siloing your Site for SEO Success - Stephen Cronin - WordCamp Sydney 2012
Siloing your Site for SEO Success - Stephen Cronin - WordCamp Sydney 2012Siloing your Site for SEO Success - Stephen Cronin - WordCamp Sydney 2012
Siloing your Site for SEO Success - Stephen Cronin - WordCamp Sydney 2012
 
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
 
The Plugin Spectactular - Tony Cosentino - WordCamp Sydney 2012
The Plugin Spectactular - Tony Cosentino - WordCamp Sydney 2012The Plugin Spectactular - Tony Cosentino - WordCamp Sydney 2012
The Plugin Spectactular - Tony Cosentino - WordCamp Sydney 2012
 
Optimising SEO for WordPress - Lisa Davis - WordCamp Sydney 2012
Optimising SEO for WordPress - Lisa Davis - WordCamp Sydney 2012Optimising SEO for WordPress - Lisa Davis - WordCamp Sydney 2012
Optimising SEO for WordPress - Lisa Davis - WordCamp Sydney 2012
 
Word to the Future - Brent Shepherd - WordCamp Sydney 2012
Word to the Future - Brent Shepherd - WordCamp Sydney 2012Word to the Future - Brent Shepherd - WordCamp Sydney 2012
Word to the Future - Brent Shepherd - WordCamp Sydney 2012
 
Securing your WordPress Website - Vlad Lasky - WordCamp Sydney 2012
Securing your WordPress Website - Vlad Lasky - WordCamp Sydney 2012Securing your WordPress Website - Vlad Lasky - WordCamp Sydney 2012
Securing your WordPress Website - Vlad Lasky - WordCamp Sydney 2012
 
There's More than 1 Way to Skin a WordPress Theme - Lachlan MacPherson - Word...
There's More than 1 Way to Skin a WordPress Theme - Lachlan MacPherson - Word...There's More than 1 Way to Skin a WordPress Theme - Lachlan MacPherson - Word...
There's More than 1 Way to Skin a WordPress Theme - Lachlan MacPherson - Word...
 
WordPress for Noobs - Wil Brown - WordCamp Sydney 2012
WordPress for Noobs - Wil Brown - WordCamp Sydney 2012WordPress for Noobs - Wil Brown - WordCamp Sydney 2012
WordPress for Noobs - Wil Brown - WordCamp Sydney 2012
 
Getting to Grips with Firebug - Anthony Hortin - WordCamp Sydney
Getting to Grips with Firebug - Anthony Hortin - WordCamp SydneyGetting to Grips with Firebug - Anthony Hortin - WordCamp Sydney
Getting to Grips with Firebug - Anthony Hortin - WordCamp Sydney
 

Recently uploaded

A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 

Recently uploaded (20)

A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 

Demystifying Custom Post Types and Taxonomies - Tracey Kemp - WordCamp Sydney 2012

  • 2. ➡ Registering Custom Post Types and Taxonomies ➡ A plugin that can help ➡ Displaying content from custom post types and taxonomies ➡ Resources
  • 3. FINAL RESULT A record label site with artists and their releases.
  • 4. PLANNING What will be a custom post type and what will be a taxonomy? Custom Post Type Taxonomy Custom Post Type Taxonomy Taxonomy Artist Location Release Artist Year The Drones VIC Here Come The Lies The Drones 2002 The Kill Devil Hills WA Wait Long By The River The Drones 2005 Midget NSW / QLD Gala Mill The Drones 2006 Front End Loader NSW Havilah The Drones 2008 Dan Kelly VIC Heathen Songs The Kill Devil Hills 2004 The Drought The Kill Devil Hills 2006 Man, You Should Explode The Kill Devil Hills 2010 Vagus Wandering Midget 1994 The Toggle Switch Midget 1997 Total Abandonment Of Better Midget 1998 Understanding
  • 6. REGISTER function register_custom_post_types() { // register post types here CUSTOM } POST add_action(‘init’, ‘register_custom_post_types’); TYPES
  • 7. function register_custom_post_types() { register_post_type( ‘artists’, array( ‘labels’ => array( REGISTER ‘name’ => _x(‘Artists’, ‘post type general name’), ‘singular_name’ => __( ‘Artist’, ‘taxonomy singular name’ ), ARTISTS ‘all_items’ => __( ‘All Artists’ ), ‘edit_item’ => __( ‘Edit Artist’ ), ‘add_new_item’ => __( ‘Add New Artist’ ), ‘new_item_name’ => __( ‘New Artist’ ), ), ‘public’ => true, ‘show_ui’ => true, ‘hierarchical’ => true, ‘supports’ => array (‘title’,‘editor’, ‘thumbnail’) ) ); } add_action(‘init’, ‘register_custom_post_types’);
  • 8. function register_custom_post_types() { register_post_type( ‘artists’, array( ‘labels’ => array( ‘name’ => _x(‘Artists’, ‘post type general name’), REGISTER ‘singular_name’ => __( ‘Artist’, ‘taxonomy singular name’ ), ‘all_items’ => __( ‘All Artists’ ), ‘edit_item’ => __( ‘Edit Artist’ ), ARTISTS ‘add_new_item’ => __( ‘Add New Artist’ ), ‘new_item_name’ => __( ‘New Artist’ ), ), ‘public’ => true, ‘show_ui’ => true, ‘hierarchical’ => true, ‘supports’ => array (‘title’,‘editor’, ‘thumbnail’) ) ); REGISTER RELEASES } add_action(‘init’, ‘register_custom_post_types’);
  • 9. function register_custom_post_types() { register_post_type( ‘artists’, array( ‘labels’ => array( ‘name’ => _x(‘Artists’, ‘post type general name’), REGISTER ‘singular_name’ => __( ‘Artist’, ‘taxonomy singular name’ ), ‘all_items’ => __( ‘All Artists’ ), ‘edit_item’ => __( ‘Edit Artist’ ), ARTISTS ‘add_new_item’ => __( ‘Add New Artist’ ), ‘new_item_name’ => __( ‘New Artist’ ), ), ‘public’ => true, ‘show_ui’ => true, ‘hierarchical’ => true, ‘supports’ => array (‘title’,‘editor’, ‘thumbnail’) ) ); register_post_type( ‘releases’, array( ‘labels’ => array( ‘name’ => _x(‘Releases’, ‘post type general name’), REGISTER ‘singular_name’ => __( ‘Release’, ‘taxonomy singular name’ ), ‘all_items’ => __( ‘All Releases’ ), RELEASES ‘edit_item’ => __( ‘Edit Release’ ), ‘add_new_item’ => __( ‘Add New Release’ ), ‘new_item_name’ => __( ‘New Release’ ), ), ‘public’ => true, ‘show_ui’ => true, ‘hierarchical’ => true, ‘supports’ => array (‘title’, ‘editor’, ‘thumbnail’) ) ); } add_action(‘init’, ‘register_custom_post_types’);
  • 10. function register_custom_post_types() { register_post_type( ‘artists’, array( ‘labels’ => array( ‘name’ => _x(‘Artists’, ‘post type general name’), REGISTER ‘singular_name’ => __( ‘Artist’, ‘taxonomy singular name’ ), ‘all_items’ => __( ‘All Artists’ ), ‘edit_item’ => __( ‘Edit Artist’ ), ARTISTS ‘add_new_item’ => __( ‘Add New Artist’ ), ‘new_item_name’ => __( ‘New Artist’ ), ), ‘public’ => true, ‘show_ui’ => true, ‘hierarchical’ => true, ‘supports’ => array (‘title’,‘editor’, ‘thumbnail’) ) ); register_post_type( ‘releases’, array( ‘labels’ => array( ‘name’ => _x(‘Releases’, ‘post type general name’), REGISTER ‘singular_name’ => __( ‘Release’, ‘taxonomy singular name’ ), ‘all_items’ => __( ‘All Releases’ ), RELEASES ‘edit_item’ => __( ‘Edit Release’ ), ‘add_new_item’ => __( ‘Add New Release’ ), ‘new_item_name’ => __( ‘New Release’ ), ), ‘public’ => true, ‘show_ui’ => true, ‘hierarchical’ => true, ‘supports’ => array (‘title’, ‘editor’, ‘thumbnail’) ) ); } add_action(‘init’, ‘register_custom_post_types’);
  • 12. REGISTER function register_taxonomies() { TAXO // register post types here NOMIES } add_action(‘init’, ‘register_taxonomies’, 0);
  • 13. function register_taxonomies() { $labels = array( ‘name’ => _x( ‘Location’, ‘taxonomy general name’ ), ‘singular_name’ => _x( ‘Location’, ‘taxonomy singular name’ ), REGISTER ‘all_items’ => __( ‘All Locations’ ), ‘edit_item’ => __( ‘Edit Location’ ), LOCATION ‘add_new_item’ => __( ‘Add New Location’ ), ‘menu_name’ => __( ‘Locations’ ), ); register_taxonomy( ‘locations’, array(‘artists’), // post-type(s) array( ‘hierarchical’ => true, ‘labels’ => $labels, ‘show_ui’ => true, ) ); } add_action(‘init’, ‘register_taxonomies’, 0);
  • 14. function register_taxonomies() { $labels = array( ‘name’ => _x( ‘Location’, ‘taxonomy general name’ ), ‘singular_name’ => _x( ‘Location’, ‘taxonomy singular name’ ), ‘all_items’ => __( ‘All Locations’ ), ‘edit_item’ => __( ‘Edit Location’ ), REGISTER ‘add_new_item’ => __( ‘Add New Location’ ), ‘menu_name’ => __( ‘Locations’ ), ); LOCATION register_taxonomy( ‘locations’, array(‘artists’), // post-type(s) array( ‘hierarchical’ => true, ‘labels’ => $labels, ‘show_ui’ => true, ) ); REGISTER RELEASE YEAR } add_action(‘init’, ‘register_taxonomies’, 0);
  • 15. function register_taxonomies() { $labels = array( ‘name’ => _x( ‘Location’, ‘taxonomy general name’ ), ‘singular_name’ => _x( ‘Location’, ‘taxonomy singular name’ ), ‘all_items’ => __( ‘All Locations’ ), ‘edit_item’ => __( ‘Edit Location’ ), REGISTER ‘add_new_item’ => __( ‘Add New Location’ ), ‘menu_name’ => __( ‘Locations’ ), ); LOCATION register_taxonomy( ‘locations’, array(‘artists’), // post-type(s) array( ‘hierarchical’ => true, ‘labels’ => $labels, ‘show_ui’ => true, ) ); $labels = array( ‘name’ => _x( ‘Release Year’, ‘taxonomy general name’ ), ‘singular_name’ => _x( ‘Release Year’, ‘taxonomy singular name’ ), ‘all_items’ => __( ‘All Release Years’ ), ‘edit_item’ => __( ‘Edit Release Year’ ), ‘add_new_item’ => __( ‘Add New Release Year’ ), ‘menu_name’ => __( ‘Release Years’ ), REGISTER ); register_taxonomy( ‘release-year’, RELEASE array(‘releases’), // post-type(s) array( YEAR ‘hierarchical’ => true, ‘labels’ => $labels, ‘show_ui’ => true, ) ); } add_action(‘init’, ‘register_taxonomies’, 0);
  • 16. function register_taxonomies() { $labels = array( ‘name’ => _x( ‘Location’, ‘taxonomy general name’ ), ‘singular_name’ => _x( ‘Location’, ‘taxonomy singular name’ ), ‘all_items’ => __( ‘All Locations’ ), ‘edit_item’ => __( ‘Edit Location’ ), REGISTER ‘add_new_item’ => __( ‘Add New Location’ ), ‘menu_name’ => __( ‘Locations’ ), ); LOCATION register_taxonomy( ‘locations’, array(‘artists’), // post-type(s) array( ‘hierarchical’ => true, ‘labels’ => $labels, ‘show_ui’ => true, ) ); $labels = array( ‘name’ => _x( ‘Release Year’, ‘taxonomy general name’ ), ‘singular_name’ => _x( ‘Release Year’, ‘taxonomy singular name’ ), ‘all_items’ => __( ‘All Release Years’ ), ‘edit_item’ => __( ‘Edit Release Year’ ), ‘add_new_item’ => __( ‘Add New Release Year’ ), ‘menu_name’ => __( ‘Release Years’ ), REGISTER ); register_taxonomy( ‘release-year’, RELEASE array(‘releases’), // post-type(s) array( YEAR ‘hierarchical’ => true, ‘labels’ => $labels, ‘show_ui’ => true, ) ); } add_action(‘init’, ‘register_taxonomies’, 0);
  • 17. USING A CUSTOM POST TYPE AS A TAXONOMY
  • 18.
  • 19.
  • 20.
  • 22. DISPLAY ARTISTS <?php //artists posts $artist_args=array( 'post_type' => 'artists', 'posts_per_page' => -1, ); $artist_query = null; $artist_query = new WP_Query($artist_args); if( $artist_query->have_posts() ) { while ($artist_query->have_posts()) : $artist_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <h2><?php the_title(); ?></h2> <?php the_excerpt(); ?> </article> <?php endwhile; } wp_reset_query(); ?>
  • 23. DISPLAY ARTISTS WITH LOCATIONS <?php //artists posts $artist_args=array( 'post_type' => 'artists', 'posts_per_page' => -1, ); $artist_query = null; $artist_query = new WP_Query($artist_args); if( $artist_query->have_posts() ) { while ($artist_query->have_posts()) : $artist_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <h2><?php the_title(); ?></h2> <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?> <?php the_excerpt(); ?> </article> <?php endwhile; } wp_reset_query(); ?>
  • 24. DISPLAY ARTISTS WITH LOCATIONS <?php //artists posts $artist_args=array( 'post_type' => 'artists', 'posts_per_page' => -1, ); <?php echo get_the_term_list( $id, $taxonomy, $before, $sep, $after ) ?> $artist_query = null; $artist_query = new WP_Query($artist_args); <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?> if( $artist_query->have_posts() ) { while ($artist_query->have_posts()) : $artist_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <h2><?php the_title(); ?></h2> <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?> <?php the_excerpt(); ?> </article> <?php endwhile; } wp_reset_query(); ?>
  • 25. DISPLAY RELEASES <?php //releases posts $release_args=array( 'post_type' => 'releases', 'posts_per_page' => -1, ); $release_query = null; $release_query = new WP_Query($release_args); if( $release_query->have_posts() ) { while ($release_query->have_posts()) : $release_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <?php the_title(); ?> <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ?> </article> <?php endwhile; } wp_reset_query(); ?>
  • 26. DISPLAY RELEASES <?php //releases posts $release_args=array( 'post_type' => 'releases', 'posts_per_page' => -1, ); $release_query = null; $release_query = new WP_Query($release_args); if( $release_query->have_posts() ) { while ($release_query->have_posts()) : $release_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <?php the_title(); ?> <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ?> </article> <?php endwhile; } wp_reset_query(); ?>
  • 27. HOW DO WE SHOW ARTISTS WITH RELEASES?
  • 28. <?php //artists posts $artist_args=array( 'post_type' => 'artists', DISPLAY 'posts_per_page' => -1, ARTISTS ); $artist_query = null; $artist_query = new WP_Query($artist_args); if( $artist_query->have_posts() ) { while ($artist_query->have_posts()) : $artist_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <h2><?php the_title(); ?></h2> <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?> <?php the_excerpt(); ?> //insert releases here </article> <?php endwhile; } wp_reset_query(); ?>
  • 29. while ($artist_query->have_posts()) : $artist_query->the_post(); ?> DISPLAY <article> <?php the_post_thumbnail(); ?> ARTISTS <h2><?php the_title(); ?></h2> <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?> <?php the_excerpt(); ?> <?php //releases posts $release_args=array( 'post_type' => 'releases', 'posts_per_page' => -1, DISPLAY ); $release_query = null; RELEASES $release_query = new WP_Query($release_args); if( $release_query->have_posts() ) { while ($release_query->have_posts()) : $release_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <?php the_title(); ?> <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ? </article> <?php endwhile; } wp_reset_query(); ?> </article>
  • 30. while ($artist_query->have_posts()) : $artist_query->the_post(); ?> DISPLAY <article> <?php the_post_thumbnail(); ?> ARTISTS <h2><?php the_title(); ?></h2> <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?> <?php the_excerpt(); ?> GET ARTIST TITLE <?php //releases posts $release_args=array( 'post_type' => 'releases', 'posts_per_page' => -1, ); DISPLAY $release_query = null; $release_query = new WP_Query($release_args); RELEASES if( $release_query->have_posts() ) { while ($release_query->have_posts()) : $release_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <?php the_title(); ?> <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ? </article>
  • 31. while ($artist_query->have_posts()) : $artist_query->the_post(); ?> DISPLAY <article> <?php the_post_thumbnail(); ?> ARTISTS <h2><?php the_title(); ?></h2> <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?> <?php the_excerpt(); ?> GET ARTIST TITLE <?php $tax_artist = get_the_title(); ?> <?php //releases posts $release_args=array( 'post_type' => 'releases', 'posts_per_page' => -1, ); DISPLAY $release_query = null; $release_query = new WP_Query($release_args); RELEASES if( $release_query->have_posts() ) { while ($release_query->have_posts()) : $release_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <?php the_title(); ?> <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ? </article>
  • 32. while ($artist_query->have_posts()) : $artist_query->the_post(); ?> DISPLAY <article> <?php the_post_thumbnail(); ?> ARTISTS <h2><?php the_title(); ?></h2> <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?> <?php the_excerpt(); ?> GET ARTIST TITLE <?php $tax_artist = get_the_title(); ?> <?php //releases posts $release_args=array( 'post_type' => 'releases', $taxonomy => $term 'artists' => $tax_artist, 'posts_per_page' => -1, ); $release_query = null; $release_query = new WP_Query($release_args); if( $release_query->have_posts() ) { DISPLAY while ($release_query->have_posts()) : $release_query->the_post(); ?> RELEASES <article> <?php the_post_thumbnail(); ?> <?php the_title(); ?> <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ? </article>
  • 33. <?php //artists posts $artist_args=array( 'post_type' => 'artists', START ); 'posts_per_page' => -1, ARTISTS $artist_query = null; $artist_query = new WP_Query($artist_args); QUERY if( $artist_query->have_posts() ) { while ($artist_query->have_posts()) : $artist_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <h2><?php the_title(); ?></h2> <?php echo get_the_term_list( $post->ID, ‘locations’, ‘From: ’, ‘ / ‘, ‘’ ); ?> <?php the_excerpt(); ?> GET ARTIST TITLE <?php $tax_artist = get_the_title(); ?> <?php //releases posts $release_args=array( START RELEASES QUERY 'post_type' => 'releases', $taxonomy => $term 'artists' => $tax_artist, 'posts_per_page' => -1, ); $release_query = null; $release_query = new WP_Query($release_args); if( $release_query->have_posts() ) { while ($release_query->have_posts()) : $release_query->the_post(); ?> <article> <?php the_post_thumbnail(); ?> <?php the_title(); ?> <?php echo get_the_term_list( $post->ID, ‘release-year’, ‘(’, ‘‘, ‘)’ ); ?> </article> CLOSE RELEASES <?php endwhile; } wp_reset_query(); ?> CLOSE </article> ARTISTS <?php endwhile; } wp_reset_query(); ?>
  • 34.
  • 35. RESOURCES WordPress Codex & Forums http://codex.wordpress.org/ http://wordpress.org/support/ Register Custom Post Types http://codex.wordpress.org/Function_Reference/register_post_type Register Taxonomies http://codex.wordpress.org/Function_Reference/register_taxonomy Query Posts http://codex.wordpress.org/Function_Reference/query_posts The Loop http://codex.wordpress.org/The_Loop
  • 36. RESOURCES Plugins CPT-onomies: Using Custom Post Types as Taxonomies http://wordpress.org/extend/plugins/cpt-onomies/
  • 37. DEMYSTIFYING CUSTOM POST TYPES & TAXONOMIES Tracey Kemp @dogshindleg Full code samples and explanations dogshindleg.com