More Related Content More from WordCamp Sydney (12) Demystifying Custom Post Types and Taxonomies - Tracey Kemp - WordCamp Sydney 20122. ➡ Registering Custom Post Types
and Taxonomies
➡ A plugin that can help
➡ Displaying content from custom
post types and taxonomies
➡ Resources
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);
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(); ?>
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(); ?>
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