The Essential Guide to WordPress 3.0 Custom Taxonomies

Posted in 1068 days ago • Written by 48 Comments

The Essential Guide to WordPress 3.0 Custom TaxonomiesIn general, taxonomies are used to arrange, classify and group things. By default, Taxonomies in WordPress are tags and categories that WordPress is using for the posts.  Apart from these two, WordPress makes it possible for theme developers to create their own taxonomies which are created within the functions.php theme file. This is what we are going to cover today. We will learn how to work with Custom WordPress taxonomies.

Recently, I’ve started working on my portfolio WordPress theme, and I needed to define different information for each project/template, like price, colors, style, etc. For this thing, I needed to create three more taxonomies which are looking like this:

The Essential Guide to WordPress 3.0 Custom Taxonomies

Creating a new taxonomy

This is as simple as it is to look at the picture above. All you have to do is to copy the code below, in your functions.php. If your theme doesn’t have one, which I don’t think it hasn’t already one, just create the file yourself. Now, this is the code you have to write for each taxonomy you are creating:


<?php

register_taxonomy('test', 'post', array(
'hierarchical' => false,  'label' => 'test',
'query_var' => true, 'rewrite' => true));

?>

Just replace “test” with the name of the taxonomy you wish to create. That’s how you create custom taxonomies. The’ll just appear in the Dashboard below the Post Tags.

Using the new taxonomies

We have created them, but as well as tags and categories, you need some code if you want to output them in your article. That’s a little code snippet that goes into your WordPress loop, just like the post tags and categories:


<?php echo get_the_term_list($post->ID, 'people', 'People: ', ', ', ''); ?>

See it yourself

Below are some examples of what we were talking about in this tutorial:

  • PopCritics.com is using custom taxonomies to output different details about the movies. See the Genre(s), Actor(s), etc…
  • TypeChart.com is another great example of WordPress site that is making good use of taxonomies for finding font styling. You can see that in the sidebar.
  • Soh Tanaka‘s portfolio is also using taxonomies to output details on projects. Observe the Client, Date, URL, Tasks, etc…

I hope you have understood what taxonomies are. I’m sure you have heard about them before, but never wondered what they are, but what about using them for creating a nice t-shirt store?

Using Custom Taxonomies to create a T-shirt store

tshirt store photo

Now that you have learned how to use custom taxonomies, we will use them for creating a T-shirt store. This won’t be a fully functional one, we will just build up the part that is using custom taxonomies.

1. Preparations

First of all we need a theme. We will use the new WordPress 3.0 default theme, called Twenty Ten. In order to get this theme and have it properly working, you need to download WordPredd 3.0 RC2. To get this version, scroll down to the bottom of the page, and the last one should be WP 3.0 RC2. Do not be worried working with WP 3.0, it has the same template tags.

Next, you will need a local server, so the best way to create it, is using WAMP, or just build up your own environment following this previous tutorial on 1stWebDesigner.

Now that you have your local server up and running, just install WordPress.

2. Editing the Twenty Ten theme

Now we need to create our custom taxonomies. First of all, think about what custom taxonomies you will need. For a T-shirt store we need to provide:

  • size details
  • price
  • brand

So, just open up the Twenty Ten functions.php file and create those custom taxonomies. I suggest to write the code at the end of the file for avoiding to break the default functions that the theme has. You can see the code that you will need and as It is, without any PHP tags:


// Custom taxonomy for Size
register_taxonomy('Size', 'post',  array(
'hierarchical' => false, 'label' => 'Size',
'query_var' =>  true, 'rewrite' => true));

// Custom taxonomy for Price
register_taxonomy('Price', 'post',  array(
'hierarchical' => false, 'label' => 'Price',
'query_var'  => true, 'rewrite' => true));

// Custom taxonomy for Brand
register_taxonomy('Brand', 'post',  array(
'hierarchical' => false, 'label' => 'Brand',
'query_var'  => true, 'rewrite' => true));

After creating the custom taxonomies, we need to modify the loop too. So this will be a little difficult, because you need to take care to not break any of the theme’s code. Don’t worry, I’ll guide you through this.

Modifying the loop. Open up the index.php file from the 2010 theme. After you have opened it, you will see a tag that is calling the loop.php file:


<?php
 /* Run the loop to output the posts.
 * If you want to  overload this in a child theme then include a file
 * called  loop-index.php and that will be used instead.
 */
 get_template_part( 'loop', 'index' );
 ?>

We will need to completely delete this, and create a  our own loop. So, instead loop tag, copy and paste this following code:


<?php if (have_posts()) : while (have_posts()) : the_post();  ?>
<div id="post-<?<span class=">
<pre><?php the_ID(); ?>" ></pre>
</div>
 <h1><a href="<?php the_permalink(); ?>"></a>
<div>
 <!--Insert custom field and custom taxonomies code here-->
<pre><?php wp_link_pages( array( 'before' =>  '</pre>
<div>' . __( 'Pages:', 'twentyten' ), 'after' =>  '</div>
' ) ); ?>
 </div><!-- .entry-content  -->
</div>
<pre><?php endwhile; else: ?></pre>
<div id="post-<?<span class=">
<pre><?php the_ID(); ?>" ></pre>
</div>
 <h1  class="entry-title">Nothing here...</h1>
<div  class="entry-content">
Sorry, no T-shirts avaiable for  sale. Try coming back later.
 </div><!--  .entry-content -->
</div>
<?php endif; ?>

This is the loop that we will use. The ID and class are some theme specific styles. You have to notice that I have removed the meta data. Now, we will need to add the codes that will retrieve our custom taxonomies and we will need to make use of custom fields too, to retrieve t-shirt thumbnail. Add them exactly where you see the HTML comment in the above code. Now, here’s the code that we need:


<img src="ID, 'post-icon', true);  ?>" alt="Icon for Post #"  />
<ul>
<li><?php echo get_the_term_list($post->ID,  'Size', 'Size: ', ', ', ''); ?></li>
<li><?php echo  get_the_term_list($post->ID, 'Price', 'Price: ', ', ', '');  ?></li>
<li><?php echo get_the_term_list($post->ID,  'Brand', 'Brand: ', ', ', ''); ?></li>
</ul>

<?php the_content(); ?>

Notice that the custom field name is “thumb”. For using this custom field you need to create a new one with the name thumb, and the value of it is the link to your thumb. Now that we have everything set, what about trying to publish a sample post. Take a look at mine:

Conclusion

So, you have learned how to use custom taxonomies, and you have created a little T-shirt store. Well, not a fully functional one, but it’s a good start :)

If you have any questions regarding this tutorial please do not hesitate to ask via comments. I’ll try to solve all your problems. Thank you!

Join over 55,891 Subscribers Today! FREE UPDATES!

Get The Only Freelancer crash course you will ever need to read!

3 Written Articles

I'm a young web designer & developer from Romania who fell in love with creativity and Adobe. Follow me at @cssfactory

48 Comments Best Comments First
  • Mark Jaquith

    Friday, June 18th, 2010 00:49

    1

    Hey, thanks for the post. Could you use the real WordPress logo? Versions are available here. We’re trying to stop the spread of the ugly fake version. :-)

    0
    • Saad Bassi

      Friday, June 18th, 2010 09:22

      7

      Hey Mark, sorry for the wrong logo. I know about that. Will try to keep a strict eye on it from now on.:) Thanks for stopping by.:)

      0
  • Mary

    Saturday, June 19th, 2010 12:22

    18

    Chris Coyer covered this in his “Digging into WordPress” e-book. Very nice to see it in WP 3.0. Will be very helpful for many people. A very good tutorial, congrats!

    0
  • Jordan Walker

    Monday, June 21st, 2010 15:07

    19

    Informative article, thanks!

    0
  • John

    Monday, June 28th, 2010 06:03

    23

    I’m trying to create a discography which will have the albums with a short description on the main page. Then when the user clicks on the album cover, it leads them to that album’s page with all the info in a table with “song title”, “lyrics”, “play icon” which will be a link to iTunes, “price”, and a “buy” button which will also take them to iTunes. I want the lyrics links to maybe pop up in a small window. Would using the taxonomy method be good for this purpose?

    0
    • Saad Bassi

      Monday, June 28th, 2010 07:57

      24

      Yeah. You can check out http://popcritics.com to get an idea

      0
  • TomL

    Thursday, June 24th, 2010 22:35

    22

    Nice tutorial.

    However, if I was to click on “Reebok” (in your example) – how do I create a page that lists all the “Reebok” tagged custom posts?

    I’ve tried various custom taxonomy tutorials, but none go this extra step to show the taxonomy archive page.

    Thanks again for your tutorial, it is very helpful.

    0
    • Wade

      Thursday, September 2nd, 2010 21:24

      26

      I have the exact same questions. Anyone? Bueler?

      (Nice tut, by the way.)

      0
      • Dan

        Wednesday, September 29th, 2010 03:50

        32

        Try refreshing your permalink settings

        0
  • Arash

    Wednesday, June 23rd, 2010 20:00

    21

    Thank you for sharing this tutorial. I just don’t fully get your example.

    What if I want to select a size, brand and a price range?

    0
  • Chris

    Monday, June 21st, 2010 19:23

    20

    Great tutorial. Still a little beyond where I am in wordpress, but it was very informative.

    0
  • Dan

    Saturday, June 19th, 2010 00:21

    13

    I prefer for custom fields rather than sighted in this tut. Well its a nice tut which will clearly helps you out in adding taxomies.
    Wordpress 3.0 has lots features and will be working on to check out as many features as i can

    0
  • Cairns Logo

    Friday, June 18th, 2010 23:04

    12

    I guess you could use this instead of using the custom fields.

    0
  • Milos Milikic

    Friday, June 18th, 2010 09:26

    4

    WP 3.0 finally out :)
    Nice tutorial. Thanks!

    0
    • FL

      Friday, June 18th, 2010 12:01

      5

      Hey you’re right! WP3.0 is out! yesssss!

      0
  • Jami Gibbs

    Friday, June 18th, 2010 07:50

    3

    What’s the difference between using a custom taxonomy and custom fields? Aren’t they both considered meta data?

    0
    • Cosmin Negoita

      Friday, June 18th, 2010 09:26

      8

      Saad is right. I find custom fields more interesting because you can do a lot of things using them, but custom taxonomies are more useful for categorizing posts.

      0
      • Randy Dokuchie

        Saturday, July 3rd, 2010 17:29

        25

        Hi Cosmin

        I am a internet startup guy and sometimes I need people to help me with some coding and stuff, I am the thinker with no coding experience , I buy the templates and modify them, I need to modify a job theme I have can you take a look at it and see if you can help me…..

        0
    • Saad Bassi

      Friday, June 18th, 2010 09:21

      6

      Jami, custom taxonomies are a lot easier to manage than custom fields.

      0
  • paul

    Tuesday, January 24th, 2012 21:28

    48

    I want to set up a structure like this:

    Zip Code —–> Supplier ——-> date/comment
    ——–> date/comment
    ——–> date comment
    Supplier ——-> date/comment
    ——–> date/comment
    ——–> date comment
    zip code ——> supplier —–> date/comment
    —–> date coment

    so it is many zip codes – many suppliers within zip code – many comments within suppliers by date

    Searchable by zip code

    I have been told I can use a custom taxonomy for zip code
    can I group suppliers within zip code, than comments with supplier using this method (I’m a bit confused/daunted but I don’t want to start PHPing/SQLing as I’m on a deadline)
    Thanks

    0
  • Tamas

    Saturday, January 21st, 2012 11:28

    47

    Thank you so much. Beautifully explained, this is exactly what solved my issue. I wish you all the best:)

    0
  • Sheharyar

    Wednesday, January 18th, 2012 15:24

    46

    Brilliant! Thanks for the tutorial!

    0
  • mark shirley

    Monday, December 26th, 2011 14:16

    45

    Great article is there a tutorial similar that would explain how to do this with twenty eleven, as the way the loop is set up is completely different. Thanks Mark

    0
  • Ryan

    Friday, November 18th, 2011 17:53

    44

    Thanks for this. I was about to hack my way through this and would have wound up with something really ugly, and much harder.

    0
  • Rawaf

    Thursday, October 13th, 2011 14:02

    43

    It’s great post and I useful from some new info about custom taxonomies But I search about how can I display the post by taxonomy term as like display post by category .. have anyone info or tutorial about this ?

    thank you

    0
  • Fred

    Wednesday, September 21st, 2011 07:32

    42

    Hey Cosmin Negoita it is great to see your post on wordpress, i was just planning to create a T-shirt store now i can use this script well..

    0
  • Stefan

    Wednesday, September 14th, 2011 09:19

    41

    hej. nice tutorial, but i dont understand the last step.
    where is the exact position and in wich file i have to place the last code snippet?

    thanks in advance

    0
  • Ma'moun Diraneyya

    Thursday, May 5th, 2011 20:35

    40

    Hi,

    Thanks for the tutorial. It is helpful.

    Now I need additional two things for my special case. Using a hierarchal custom taxonomy associated with a custom post type, I need:

    (1) To change the admin meta-box to a drop-down menu to make sure the post has only one term associated. The drop-down menu should show just the latest children terms, so let us say, for example, I have those terms:
    Zone X
    –> Package X (Zone X’s child)
    —-> District X (District X’s child)
    Zone Y
    –> Package Y (Zone Y’s child)
    —-> District Y (District Y’s child)
    I want the drop-down to show only the latest children: District X and District Y.

    (2) To automatically select all parents of a selected child term when saving the post. So, let us say the user chose District Y in my previous example, then both Package Y and Zone Y should be selected as well, behind the scenes.

    Could you help me with that please, or point me out to any helpful reference?
    Thanks in advanced,

    0
  • Bjorn johansen

    Monday, April 4th, 2011 13:23

    39

    I am using Twenty ten as a base for mye theme. Is there any way to change the taxonemy already included. I am thinking like instead of showing the word
    post in all places in the blog, could you replace post with blogarticle instead.
    So the theme would show blogarticle by xxxx instead of post by xxx

    0
  • Tom

    Friday, March 4th, 2011 01:45

    38

    Not really sure that custom taxonomies is what you want to be using for things like Price etc. You’re better off creating a custom post type for Product and then setting up meta for that. Unless you have a very fixed list of prices (eg: every item is either $10, $35 or $100).

    Take a look at the WordPress Codex entry, that covers this topic exactly: http://codex.wordpress.org/Post_Types#Custom_Types

    Or this awesome tutorial that actually does exactly what you’re talking about:
    http://net.tutsplus.com/tutorials/wordpress/rock-solid-wordpress-3-0-themes-using-custom-post-types/

    0

Comments are closed.

x

Do You Know How To Freelance And Get More Clients?

E-Book

If not, then it's time to learn how to:

  • Start as web design freelancer for dream lifestyle!
  • Design beautiful designs your clients will love!
  • Get your first clients and get more clients!

You can trust 1stWebDesigner to help you become a better web designer!

- Jacob Cass | Just Creative

Just enter your name and email below and click Get Updates!

unknown - US