Taking WordPress Custom Taxonomies to the Next Level

Taking WordPress Custom Taxonomies to the Next Level

Tutorial Details
  • Program: WordPress
  • Version: 2.9 +
  • Difficulty: Advanced
  • Estimated Completion Time: Varies

WordPress custom taxonomies are a great way to organise your website’s content, but what are they exactly? How can they be implemented effectively? More importantly though, how can they benefit your website? Fear not, what you’re about to read in the following is the most comprehensive guide to WordPress custom taxonomies you’ll find on the internet today.


Custom Taxonomy Basics

At its most basic level, a taxonomy is simply a method of grouping things together. If you’ve published a post in WordPress before, then chances are you’ve already used taxonomies. The standard tags and categories within WordPress are considered taxonomies! Now, let’s talk more about custom taxonomies. WordPress has allowed you to create your own taxonomies since version 2.3, however, they’ve only really started becoming popular since around version 2.9.

A popular way of explaining custom taxonomies is to use the example of films. Let’s pretend we’re writing an article about the film “Terminator 2″. What we’d typically do with the standard built-in taxonomies, is classify the article using tags and categories. The problem with the built in taxonomies, is that they’re extremely generic.

We’ll continue with this example and pretend we’ve entered “Arnold Schwarzenegger” as one of our tags. For those not familiar with the Austrian actor, this could be quite confusing. It’s obviously a person’s name, but is this person an actor? A director? A producer? A much better approach would be to create a custom taxonomy called “Actors” and add Arnold’s name to that particular taxonomy. We could go even further, and add additional custom taxonomies for other typical film groupings such as genres, directors, producers and others.


Understanding Terms

One word you’d also do well to familiarise yourself with is “term”. In WordPress, a term is a single classification that lives within and is defined by its taxonomy. In our previous example we had a taxonomy called “Actors”, therefore our terms would be: Arnold Schwarzenegger, Linda Hamilton, Edward Furlong, etc.


How Can Custom Taxonomies Benefit My Website?

Custom taxonomies can significantly increase the organisation and usability of your website. Because of the flexibility that comes with custom taxonomies, they’ll always be more specific to your topic of choice when compared to tags and categories. An obvious example is to include your taxonomies at the bottom or top of your article. In the example below I’ve created three custom taxonomies, and displayed the associated terms below the main content area of the article.

WordPress taxonomy example

Cool right? That’s not the only use though. You’ll note in the example above, that the text appears to be hyperlinked, that’s because it is. Custom taxonomies allow you to have archives for specific terms. This not only allows for better content organisation, but also allows users to subscribe to specific terms via RSS. Another lesser implemented use for custom taxonomies is to simply use them as a replacement for tags. I decided to take this exact approach for a gaming blog I recently launched. You don’t always have to highlight the fact that you’re using custom taxonomies, just remember, their real power lies within the potential for superior archiving, searching, querying and URL structure.

There are various other benefits to using custom taxonomies but rather than discussing theoretical use cases, let’s instead look at some practical examples with code to back up it.


Writing Our First Custom Taxonomy

Now that we understand what taxonomies are and how to use them, we can begin to implement them into our themes. To start off with we’ll first register our custom taxonomy. In this example, I’m creating a taxonomy called “Actors”. If you’re following along with this tutorial, you’ll want to open up your theme’s functions.php file and insert the following code.

$labels = array(
    'name'                          => __( 'Actors', 'your-themes-text-domain' ),
    'singular_name'                 => __( 'Actor', 'your-themes-text-domain' ),
    'search_items'                  => __( 'Search Actors', 'your-themes-text-domain' ),
    'popular_items'                 => __( 'Popular Actors', 'your-themes-text-domain' ),
    'all_items'                     => __( 'All Actors', 'your-themes-text-domain' ),
    'parent_item'                   => __( 'Parent Actor', 'your-themes-text-domain' ),
    'edit_item'                     => __( 'Edit Actor', 'your-themes-text-domain' ),
    'update_item'                   => __( 'Update Actor', 'your-themes-text-domain' ),
    'add_new_item'                  => __( 'Add New Actor', 'your-themes-text-domain' ),
    'new_item_name'                 => __( 'New Actor', 'your-themes-text-domain' ),
    'separate_items_with_commas'    => __( 'Separate Actors with commas', 'your-themes-text-domain' ),
    'add_or_remove_items'           => __( 'Add or remove Actors', 'your-themes-text-domain' ),
    'choose_from_most_used'         => __( 'Choose from most used Actors', 'your-themes-text-domain' )
);

$args = array(
    'labels'                        => $labels,
    'public'                        => true,
    'hierarchical'                  => false,
    'show_ui'                       => true,
    'show_in_nav_menus'             => true,
    'query_var'                     => true
);

register_taxonomy( 'actors', 'post', $args );

Don’t be alarmed by the amount of code here, it’s all quite simple when you break it down. The majority of the code is located in the $labels array. This array defines the content of certain labels within the WordPress dashboard. The $args array is where the real magic happens; this defines the settings for the taxonomy.

You’ll note that for the “labels” argument we’re passing in the label array we created earlier. Another argument worthy of mention is the “hierarchical” argument. This defines whether or not our taxonomies have the ability of nested taxonomies, or “child” taxonomies. In our example we won’t require this particular functionality but take note of its existence as you might require a granular taxonomy system in future projects.

Explaining each argument is beyond the scope of this particular tutorial, but if you’d like to know more you can always study these arguments in detail on the official WordPress codex register_taxonomy page.

The last thing to take note here is the call to the register_taxonomy function. The first argument defines the name of the taxonomy (this is used internally within WordPress). The second argument defines which post type the taxonomy will be attached to. In our scenario, we’re attaching it to standard WordPress posts. Alternatively, you can attach it to a custom post type or even several different post types by passing it an array of post types.

Now that we’ve successfully registered our custom taxonomy, you’ll notice we now have an “Actors” meta box sitting in the right hand column of the WordPress post edit page. At this stage, adding terms into this meta box will save them into the database but will not display them on the front end of your theme. Let’s implement the example presented before with the three taxonomy lists, located at the bottom of the post.

For this example you’ll need to duplicate the code used to register the actors taxonomy twice and rename the labels to reflect our additional taxonomies, genres and writers. Here’s what my functions.php file is looking like so far.

$labels = array(
    'name'                          => __( 'Actors', 'your-themes-text-domain' ),
    'singular_name'                 => __( 'Actor', 'your-themes-text-domain' ),
    'search_items'                  => __( 'Search Actors', 'your-themes-text-domain' ),
    'popular_items'                 => __( 'Popular Actors', 'your-themes-text-domain' ),
    'all_items'                     => __( 'All Actors', 'your-themes-text-domain' ),
    'parent_item'                   => __( 'Parent Actor', 'your-themes-text-domain' ),
    'edit_item'                     => __( 'Edit Actor', 'your-themes-text-domain' ),
    'update_item'                   => __( 'Update Actor', 'your-themes-text-domain' ),
    'add_new_item'                  => __( 'Add New Actor', 'your-themes-text-domain' ),
    'new_item_name'                 => __( 'New Actor', 'your-themes-text-domain' ),
    'separate_items_with_commas'    => __( 'Separate Actors with commas', 'your-themes-text-domain' ),
    'add_or_remove_items'           => __( 'Add or remove Actors', 'your-themes-text-domain' ),
    'choose_from_most_used'         => __( 'Choose from most used Actors', 'your-themes-text-domain' )
);

$args = array(
    'labels'                        => $labels,
    'public'                        => true,
    'hierarchical'                  => false,
    'show_ui'                       => true,
    'show_in_nav_menus'             => true,
    'query_var'                     => true
);

register_taxonomy( 'actors', 'post', $args );

$labels = array(
    'name'                          => __( 'Genres', 'your-themes-text-domain' ),
    'singular_name'                 => __( 'Genre', 'your-themes-text-domain' ),
    'search_items'                  => __( 'Search Genres', 'your-themes-text-domain' ),
    'popular_items'                 => __( 'Popular Genres', 'your-themes-text-domain' ),
    'all_items'                     => __( 'All Genres', 'your-themes-text-domain' ),
    'parent_item'                   => __( 'Parent Genre', 'your-themes-text-domain' ),
    'edit_item'                     => __( 'Edit Genre', 'your-themes-text-domain' ),
    'update_item'                   => __( 'Update Genre', 'your-themes-text-domain' ),
    'add_new_item'                  => __( 'Add New Genre', 'your-themes-text-domain' ),
    'new_item_name'                 => __( 'New Genre', 'your-themes-text-domain' ),
    'separate_items_with_commas'    => __( 'Separate Genres with commas', 'your-themes-text-domain' ),
    'add_or_remove_items'           => __( 'Add or remove Genres', 'your-themes-text-domain' ),
    'choose_from_most_used'         => __( 'Choose from most used Genres', 'your-themes-text-domain' )
);

$args = array(
    'labels'                        => $labels,
    'public'                        => true,
    'hierarchical'                  => false,
    'show_ui'                       => true,
    'show_in_nav_menus'             => true,
    'query_var'                     => true
);

register_taxonomy( 'genres', 'post', $args );

$labels = array(
    'name'                          => __( 'Writers', 'your-themes-text-domain' ),
    'singular_name'                 => __( 'Writer', 'your-themes-text-domain' ),
    'search_items'                  => __( 'Search Writers', 'your-themes-text-domain' ),
    'popular_items'                 => __( 'Popular Writers', 'your-themes-text-domain' ),
    'all_items'                     => __( 'All Writers', 'your-themes-text-domain' ),
    'parent_item'                   => __( 'Parent Writer', 'your-themes-text-domain' ),
    'edit_item'                     => __( 'Edit Writer', 'your-themes-text-domain' ),
    'update_item'                   => __( 'Update Writer', 'your-themes-text-domain' ),
    'add_new_item'                  => __( 'Add New Writer', 'your-themes-text-domain' ),
    'new_item_name'                 => __( 'New Writer', 'your-themes-text-domain' ),
    'separate_items_with_commas'    => __( 'Separate Writers with commas', 'your-themes-text-domain' ),
    'add_or_remove_items'           => __( 'Add or remove Writers', 'your-themes-text-domain' ),
    'choose_from_most_used'         => __( 'Choose from most used Writers', 'your-themes-text-domain' )
);

$args = array(
    'labels'                        => $labels,
    'public'                        => true,
    'hierarchical'                  => false,
    'show_ui'                       => true,
    'show_in_nav_menus'             => true,
    'query_var'                     => true
);

register_taxonomy( 'writers', 'post', $args );

Now that we’ve registered our three taxonomies, we’re ready to start displaying our newly created taxonomies and terms within our theme. Just make sure to edit an existing post to add some dummy terms into the new taxonomy meta boxes.

Backend Taxonomy Screenshot

Insert the following code at the bottom of your functions.php file.

function display_post_taxonomies( $content ) {

	if( is_single() ) {
	
		$args = array( 'public' => true, '_builtin' => false );
		
		$output = 'objects';
		
		$operator = 'and';
		
		$taxonomies = get_taxonomies( $args, $output, $operator );
		
		if( $taxonomies ) {
		
			$content .= '<div class="taxonomy_container">';
			
			foreach( $taxonomies as $taxonomy ) {
			
				$args = array(
								'orderby'				=> 'name',
								'echo'					=> false,
								'taxonomy'				=> $taxonomy->name,
								'title_li'				=> '<span class="taxonomy_title">' . __( $taxonomy->labels->name, 'your-themes-text-domain' ) . '</span>',
								'show_option_none'		=> __( 'No ' . $taxonomy->labels->name, 'your-themes-text-domain' )
							);

				$content .= '<ul>' . wp_list_categories( $args ) . '</ul>';
				
			}
			
			$content .= '</div>';
		
		}

	}
	
	return $content;

}

add_filter( 'the_content', 'display_post_taxonomies' );

In a nutshell, we’re filtering the post’s content to add our custom taxonomy section at the bottom of the post. Using a filter instead of a template tag means that we avoid editing specific template files. Not only is this easier, but it also allows us to use this code in multiple themes in a more flexible manner.

You’ll also notice that this function is extremely generic; we’re not at all referencing the taxonomies we created earlier. The above code only grabs custom taxonomies, calling the get_taxonomies function with the args array index “built_in” set to false ensures that we’re not including any bundled WordPress taxonomies.

We then loop through our taxonomies and start adding additional HTML elements for formatting purposes. Within our loop we’re also making use of the wp_list_categories function. This function prepares an unordered list of terms for a given taxonomy. Not only does it handle the preparation of the HTML structure it also automatically links each individual term to its respective archive page.

Now, if you load up your post you’ll notice you have a set of three unordered lists, each displaying a taxonomy heading with the associated terms underneath. The problem is, there’s no styling just yet. Add the following code to your themes style.css file to spruce it up a little.

.taxonomy_container {
	overflow: hidden;
	display: block;
	clear: both;
	margin-bottom: 20px;
}

.taxonomy_container ul {
	margin: 0px;
	padding: 0px;
	list-style-type: none;
}

.taxonomy_container > ul {
	width: 31%;
	float: left;
	margin-right: 3.5%;
}

.taxonomy_container > ul:last-child {
	margin-right: 0%;
}

.taxonomy_title {
	padding-left: 2px;
	padding-bottom: 2px;
	border-bottom: 2px solid #333;
	display: block;
	margin-bottom: 2px;
	font-weight: bold;
}

.taxonomy_container > ul li ul li {
	padding-left: 2px;
	padding-bottom: 3px;
	border-bottom: 1px dotted #ccc;
	margin-bottom: 3px;
}

.taxonomy_container > ul li ul li:last-child {
	border-bottom: 0px;
}

Conclusion

There you have it folks; part one of our guide to taking WordPress custom taxonomies to the next level. Today, we’ve had a look at what custom taxonomies are, what they’re good at and how to implement them effectively in your theme. In the next article we’ll be looking at customizing your taxonomy and term archive templates.

Note: Want to add some source code? Type <pre><code> before it and </code></pre> after it. Find out more
  • http://www.jacorre.com Josh

    I still don’t understand why tutorials state to put this code in the functions file of your theme. If you’re using these custom taxonomies (and custom post types) for your website, I would think you’re going to be using them no matter what theme you have.

    If I switch themes, I need to remember to include that exact same code in the new theme’s functions file. That’s annoying!

    It would be better to instruct us to write a simple plugin instead.

    • http://zanematthew.com Zane Matthew

      Your definitely right, placing this code in a plugins is a must! But what would have to be covered is the template_redirect hook. There’s more than one way to implement it, here’s how I do it on bmxraceevents.com

      post_type;
      }

      $post_type = ‘event’;

      if ( $post_type != ‘event’ )
      return;

      $template = array(
      ‘post_type’ => ‘event’,
      ‘single’ => plugin_dir_path( __FILE__ ) . ‘theme/single-bmx-race-event.php’,
      ‘archive’ => plugin_dir_path( __FILE__ ) . ‘theme/search-bmx-race-event.php’,
      ‘search’ => plugin_dir_path( __FILE__ ) . ‘theme/search-bmx-race-event.php’,
      ‘taxonomy’ => array(
      array(
      ‘taxonomy’ => ‘attendee’,
      ‘template’ => plugin_dir_path( __FILE__ ) . ‘theme/attendee-dashboard.php’
      )
      ),
      ‘default’ => plugin_dir_path( __FILE__ ) . ‘theme/index.php’
      );

      do_action( ‘zm_template_redirect’, $template );
      }
      add_action(‘template_redirect’, ‘bmx_race_schedule_redirect’, 6);
      And the Gist: https://gist.github.com/2500025

      And my custom action
      <?php

      /**
      * Determine if given templates exists if they do loads them
      * based on the type of page being displayed.
      *
      * @uses is_single()
      */
      if ( ! function_exists( '_zm_template_redirect' ) ) :
      function _zm_template_redirect( $params=array()){

      extract( $params );

      if ( is_single() ) {
      if ( file_exists( $params['single'] ) ) {
      load_template( $params['single'] );
      exit();
      }
      } elseif ( is_post_type_archive('bmx-race-event') ) {
      if ( file_exists( $params['archive'] ) ) {
      load_template( $params['archive'] );
      exit();
      }
      } elseif ( is_search() ) {
      if ( file_exists( $params['search'] ) ) {
      load_template( $params['search'] );
      exit;
      }
      } elseif ( is_tax() ) {
      if ( is_array( $params['taxonomy'] ) ) {
      foreach( $params['taxonomy'] as $taxonomy ){
      if ( file_exists( $taxonomy['template'] ) ) {
      load_template( $taxonomy['template'] );
      exit;
      }
      }
      }
      if ( file_exists( $params['taxonomy'] ) ) {
      load_template( $params['taxonomy'] );
      exit;
      } else {
      load_template( $params['taxonomy'] );
      exit;
      }
      } else {
      if ( file_exists( $params['default'] ) ) {
      load_template( $params['default'] );
      exit;
      }
      }
      }
      add_action( 'zm_template_redirect', '_zm_template_redirect', 1 );
      endif;
      And the Gist https://gist.github.com/2500075

      • http://zanematthew.com Zane Matthew

        Ok, so clearly the “pre” tags in comments don’t work, just check the gist for code

        https://gist.github.com/2500075
        https://gist.github.com/2500025

        • http://wp.envato.com/ Japh Thomson
          Staff

          Hi Zane! To stop the editor eating your code, be sure to wrap it properly in <pre> tags as directed.

          e.g.
          <pre name=”code” class=”php”>
          // code here
          </pre>

          (Remembering also to replace < with &lt; and > with &gt;)

      • http://stephenharris.info Stephen Harris

        Zane, this is a very good work around for providing custom templates in plug-ins. Just a few suggestions: the WordPress conditionals are available to you in template_redirect – so you can just use the is_post_type_archive, is_singular conditionals etc to check the post type of the content being displayed.

        Also – since plug-ins shouldn’t completely over-ride a theme – it would be better to check if the template WordPress has picked is appropriate (e.g. the user may have a single-event.php template in their theme they wish to use). If it is, then use it – if not use the plug-in provided template.

        For a taxonomy, they may have taxonomy-event-category.phpor even taxonomy-event-category-catslug.php in their theme. If it does, it would be good to use that, rather than plug-in templates as it gives the user the freedom to edit how content is shown independently of plug-in (and any updates that would remove their edits).

        Feel free to nose around this GitHub repro which does this.

        • http://zanematthew@gmail.com Zane

          Stephen,

          Thats a really good point, I’ve tried to combat the unwanted loading of templates with line #22 in the gist.
          https://gist.github.com/2500025

          if ( $post_type != ‘event’ )
          return;

          I’ll have to admit I didn’t go overboard with it as for this plugin its private, but I did do something like what your doing on another plugin, here’s the repo
          https://github.com/zanematthew/task-tracker/blob/master/abstract.php#L194

          My logic for loading templates is the following:
          “This should work for an unlimited number of custom post types. If the user
          made a custom tempalte in their theme folder load that, if not we load our
          custom template, and fall back on the default template (default in out plugin).”

          and your (again) absolutely right regarding the taxonomy file naming conventions, I’m slowly working that feature in as needed.

          line #30
          https://gist.github.com/2500025

          ‘taxonomy’ => array(
          array(
          ‘taxonomy’ => ‘attendee’,
          ‘template’ => plugin_dir_path( __FILE__ ) . ‘theme/attendee-dashboard.php’
          )
          ),

          I wanted to redirect taxonomies based on my custom post type, so by default I can do [taxonomy]-[post_type].php or later in my function I check if its an array if so map taxonomy and template

          Just curious why did you use template_include, I haven’t used that one yet.

          • http://stephenharris.info Stephen Harris

            template_include is the proper hook to use for changing the template. It filters the WordPress-chosen template path (and so you can check if the template is ‘suitable’, as other conditionals). By using this hook other plug-ins can modify the template afterwards.

            template_redirect is an action called a little earlier. This requires including the template file, and then exit-ing. Unlike the above its a hard and fast ‘redirect’ – not allowing for any further alterations.

            On a private set-up, this isn’t going to make much difference. But template_include is preferable.

      • Cory

        Nice work on bmxraceevents.com, looks awesome.

        • Shah Faisal

          Simply Awesome work dude…

  • http://www.creativemanner.com ozgur coruhlu

    Good one for sure. I like the site you’ve mentioned at the beginning.

  • http://thomasgbennett.com Thomas

    I’m not sure this is advanced. Good tutorial but I think its pretty straightforward.

  • Pingback: Taking WordPress Custom Taxonomies to the Next Level | Qtiva

  • Pingback: Taking WordPress Custom Taxonomies to the Next Level | Shadowtek Hosting and Design Solutions

  • Pingback: Wordpress İçin Yararlı Makaleler | Web Araçları

  • http://thomasmaxson.com Thomas Maxson

    Great tutorial. I cannot wait for the other parts to come out. I hope they have something to do with cross referencing Taxonomies (ie – if tagged in X and Y, sort by A and show as a list).

    Hotels (Current Category)
    - Florida
    – Hotel A
    – Hotel B
    – Hotel C
    - Georgia
    – Hotel D
    – Hotel E

  • http://twitter.com/twittem Edward McIntyre

    Great tutorial. I like the way you laid out your examples.

    I wish when Envato released multi part tutorials they would include a list of all parts with release dates. I would love to know what is coming up in this series.

    • http://wp.envato.com/ Japh Thomson
      Staff

      Great suggestion, Edward! I’ll keep this in mind for future series’ :)

      • http://twitter.com/twittem Edward McIntyre

        Awesome! Would probably save some of these “this is not next level” comments :)

  • Daris Fox

    Wouldn’t it be easier to create a function to create taxonomies based off a variable in a function? You have a lot of unnecessary duplicated code here which is doing the same task for actor, genre and writer. I’d also echo the point if you’re creating custom content for a site it really should be put into a functions plug-in rather than the theme file. Nothing worse than switching a theme and find most of your content has gone with it.

    For beginners it’s important to show them the best practices and why those should be applied, there are too many sites that are showing similar content to the above without any thought with regards to a live production site and how to optimise the code. Hopefully you’ll address these issues in future articles.

    • http://stephenharris.info Stephen Harris

      There isn’t much duplicated code – only the $args array. The labels are different for each post type. While you could pass a variable $plural (=’Genres’) and use “All $plural” as a label value (and thus reducing the amount of code) – this would break translations. (And you can’t just translate the plural ‘Genres’ because this won’t work for all languages – translation is done by phrase not words.)

    • http://zanematthew.com Zane

      Daris,

      IMO the fastest way to create custom taxonomies is like this:
      “Map an array to the params, you want and foreach it over ‘register_taxonomy’”

      Link to array in repo https://github.com/zanematthew/task-tracker/blob/master/plugin.php#L239

      I have a foreach loop which maps the params your passing into the needed WordPress function, note its not 100% upto date with the “register_taxonomy” params list

      The function call
      https://github.com/zanematthew/task-tracker/blob/master/abstract.php#L132

      Thats the repo for this plugin I wrote gettasktracker.com/demo

  • Murali Kumar

    The title of this post is misleading.
    Where is the next level thing?
    It just tells about normal custom taxonomy creation..

    • Gavin

      I agree

    • http://wp.envato.com/ Japh Thomson
      Staff

      Hi Murali and Gavin, sorry perhaps it isn’t clear enough… this is the first part in a series! It’s important that we make sure everyone has the basics before we progress to the next level. Hence this post, covering the base first.

  • http://aghoshb.com Aghosh Babu

    This is a good tutorial, but themergency has a generator for custom post types and custom taxonomies – I’d like to know how to properly make permalinks work for taxonomies, the same way we can tag base and category base.

  • Pingback: Wordpresss - Parts - Content | Pearltrees

  • http://Www.mywpexpert.com Brandon Yanofsky @myWPexpert.com

    Great tutorial.

    To speed things up, I’ve started using the custom post type ui plugin that allows the creation of custom post types and taxonomies quickly and easily. Might be a better way for beginners, or for more advanced users to ge things done quickly.

    What do you think about that plugin?

  • http://www.kevinleary.net Kevin Leary

    Good read, a great first article at WPTuts+ Chris. I look forward to the next one.

  • Pingback: BlueHost WordPress Hosting Review Released By TCWH | Open Knowledge

  • http://www.wpsquare.com/ Bharat Chowdary

    Good tutorial, I always prefer to code rather than using crappy plugins to get my job done.

  • Mark

    I wonder if anyone can give me some advice around this subject, I’m doing a property website and thought of using taxonomies for search filtering of the properties, sending the values for the taxonomies via a series of select elements in a form, but what I want is a top level way to initially split the search off between properties to buy and properties to let, then all the subsequent search criteria would be the same for each, so number of bedrooms, area etc, could i do this with parent and child taxonomies or is there a better way?
    Any pointers would be great.

  • Pingback: Tweet-Parade (no.17 Apr 2012) | gonzoblog.nl

  • http://weblusive.com Weblusive

    Good tutorial! One point I’m really curious and have seen a lot of topics in TF forum is the pagination of taxonomies. For example if I have a portfolio custom post type and categories taxonomy, how to manage pagination in a category. Would really appreciate if you could share your experience with this (maybe in part 2 of the tutorial?).

  • http://www.jsxtech.com Jaspal Singh

    Thanks Chris, Good Article…

    I’m looking for custom taxonomy with images/thumbnails.

    • http://twitter.com/joshuavalentin Joshua Valentin 

      Jaspal, did you already figure this one out?

  • Томица Кораћ

    What if I wanted a drop down menu for my taxonomies? I.E. if I want to not allow taxonomy values to be typed in, but rather selected from a preset list?

  • http://chipmint.com Ritam Das

    I want to create a feature like “bringing-premium-pixels-to-life” or other tutorial session in my website.. where all the tutorial tags with the taxonomy “bringing-premium-pixels-to-life” will show up.. and in main page, if any post is under any taxonomy tags, it will show up “This entry is part 10 of 10 in the Bringing Premium Pixels to Life Session – Show All” or something like this.. please give me a brief idea how to do this.. Thanks in advance

  • Pingback: Adding Post Series Functionality to WordPress With Taxonomies | Wptuts+

  • Pingback: Adding Post Series Functionality to WordPress With Taxonomies | Wordpress Webdesigner

  • Pingback: My Stream | Adding Post Series Functionality to WordPress With Taxonomies | My Stream

  • Pingback: Adding Post Series Functionality to WordPress With Taxonomies | How to Web

  • Pingback: Adding Post Series Functionality to WordPress With Taxonomies | Wordpress Sifter

  • Pingback: Quick Tip: Add Custom Columns in WordPress Manage Screens | Wptuts+

  • Pingback: Quick Tip: Add Custom Columns in WordPress Manage Screens | Wordpress Webdesigner

  • Pingback: Quick Tip: Add Custom Columns in WordPress Manage Screens | Shadowtek Hosting and Design Solutions

  • Pingback: My Stream | Quick Tip: Add Custom Columns in WordPress Manage Screens | My Stream

  • Pingback: Quick Tip: Add Custom Columns in WordPress Manage Screens | How to Web

  • http://photoshopix.com Hugh Madison

    I see that passed almost a month from the date of publishing this great article. When will be the next one? Especially would be great if dedicated to taxanomy thumbnails and crossed taxanomies. Yes, i know there have plugins to display taxanomy images, but using separate plugins for your every need is not an option )

    • http://twitter.com/twittem Edward McIntyre

      I agree. It’s now been over two months with no movement on this “series” Personalty this is a topic I was very interested in… but here we are… months later.

      I’m going to assume the author has been kidnapped and they are asking for a ransom and wp tuts is all like… we don’t negotiate with terrorists… but want to hope that everything is solved peacefully… yeah, that must be it.

      We will be praying for your safe return.

      • http://wp.envato.com/ Japh Thomson
        Staff

        Hi Edward and Hugh, unfortunately I can’t confirm or deny Chris’ whereabouts. However, I can say that we do not negotiate with terrorists, but there is a reward for his safe return, and we appreciate your kind words in this difficult time ;)

  • Pingback: Quick Tip: Add Custom Columns in WordPress Manage Screens

  • Pingback: WordPress Community Roundup for the Week Ending April 28

  • avi

    hello

    i see your post while searching for some solution, i am not wp expert not programming geek, but i need solution for my blog
    my question is – i want to create a new url structure with my categories and custom taxonomies,
    like example

    Custom Taxonomy “programs” with child taxonomies, fine art, communication design, graphic design, printmaking.

    In the main menu under the parent category “News” the child categories are, student news, faculty news, and alumni news
    now i want to show the student news for fine arts
    site.com/student-news/fine-arts/ and
    site.com/faculty-news/fine-arts/ and
    site.com/faculty-news/printmaking/ and
    site.com/alumni-news/fine-arts/ and so on

    can you help me please.
    many thanks

  • Bipin

    Great Article! I have a specific requirement related to ordering values entered in the Custom Taxonomies. How do I display the terms entered in the meta boxes in the order I entered them and “NOT” in alphabetical order.(ex. If I enter Edward, Linda, Arnold in meta boxes, how do I NOT display them Arnold, Edward, Linda).

    Thanks in advance. Any help would be greatly appreciated.

  • Pingback: Ordering values entered in Custom Taxonomies | question code

  • Pingback: Week of 11/30/12 – TDAS Creative Wiki