Taxonomy is a powerful feature that allows users to organize and structure content more efficiently. It enables the creation of custom classifications or grouping systems, which can be beneficial for managing websites with diverse content.
WordPress provides two default taxonomies: categories and tags. Categories offer a broad method of organizing content into hierarchical groups, while tags provide a more flexible way to assign descriptive keywords to content items. However, there are situations where these default taxonomies may not be sufficient to meet specific website requirements.
Why Use Custom Taxonomy?
This is where custom taxonomies come into play. They allow WordPress users to create their own unique classifications tailored to their website’s needs. By defining custom taxonomies, content creators gain greater control over how their content is organized, making it easier for visitors to navigate and locate specific information.
custom taxonomies facilitate better content management. They enable content creators to assign specific attributes or characteristics to their content items. For instance, a photography website could create a custom taxonomy for photo genres such as landscapes, portraits, or wildlife. By assigning the appropriate taxonomy term to each image, it becomes easier to filter and showcase specific types of photographs across the site.
In this tutorial, we will show you how to create a custom taxonomy without using any plugins. Let’s check it out!
Creating the Custom Taxonomy
To create a custom taxonomy without relying on a plugin, we will utilize the register_taxonomy()
built-in WordPress function in a PHP code snippet. To simplify things, we will add the code directly to the functions.php file from the active theme which can be accessed by going to Appearance → Theme File Editor from your WordPress dashboard (if you use a block theme, you can find Theme File Editor under the Tools menu).
Before you start adding the snippets to your theme files, you might want to back up your site to avoid breaking your theme. Or, you can use a child theme or create a plugin yourself for the snippets to avoid losing your changes when you update or change your theme.
For this tutorial example, we will create a “Collections” custom taxonomy and assign it to the “Shoes” post type which we’ve created before in creating a custom post type tutorial.
Once youre ready, place the following code at the bottom of the file on your editor.
add_action('init', 'register_custom_taxonomy'); function register_custom_taxonomy() { $labels = array( 'name' => _x('Collections', 'taxonomy general name'), 'singular_name' => _x('Collection','taxonomy singular name'), 'search_items' => __('Search Collection'), 'all_items' => __('All Collection'), 'parent_item' => __('Parent Collection'), 'parent_item_colon' => __('Parent Collection:'), 'edit_item' => __('Edit Collection'), 'update_item' => __('Update Collection'), 'add_new_item' => __('Add New Collection'), 'new_item_name' => __('New Collection Name'), 'menu_name' => __('Collections'), ); $args = array( 'hierarchical' => true, // make it hierarchical (like categories) 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, 'query_var' => true, 'show_in_rest' => true, 'rewrite' => array('slug' => 'Collection'), ); register_taxonomy('Collections', 'wpp_shoe', $args); // Register the Taxonomy }
After you’ve added the code to the file and make sure the custom taxonomy is assigned to the desired post type ( wpp_shoe
in this case), save the changes by clicking the Update File button.

Now, you can find the newly created custom taxonomy under the assigned post type on your WordPress dashboard like follow.

The Bottom Line
Custom taxonomies are a valuable tool for content creators as they offer greater control over the organization of their content. By creating a custom post type, it is highly likely that a custom taxonomy will also be created to complement it. This combination allows visitors to navigate and locate specific information more easily thus enhancing the overall user experience.