How to Register Custom Taxonomy For WordPress Users

The Custom Taxonomy feature has been introduced since WordPress 2.9. It allows you to create custom groups for Post, Page as well as Custom Post Types.

Say that you are building a book directory website, and you have created a Custom Post Type for posting the Books. By using Custom Taxonomy, you can create a custom taxonomy for it, called Genre. Within this Genre taxonomy, you can create a number of items (which technically is called terms) such as Fiction, Kids, or Biography for grouping the Books.

Unfortunately, at this point, we can’t register Custom Taxonomy to Users; at least not in a straightforward way as we would register it in the other Post Types. One perfect application that we could foresee from this idea is that we can use it to assign additional user attributes, such as their occupation, profession or organizational position, in place of registering a new set of User Roles. It also opens the possibility to query the users based upon the assigned taxonomy terms.

If this idea is something that may benefit your website, take a look at this tip.

Getting Started

First, we will install a plugin named User Taxonomies to simplify our job.

Once the plugin is activated. Go to GenerateWP to generate the Taxonomy codes. Put the code output in the functions.php file of your theme. This code snippet below is an example. Though, it has been stripped out to make this article look shorter. You can follow this link to see the full code.

if ( ! function_exists( 'user_staff_position' ) ) {
function user_staff_position() {
	register_taxonomy( 'staff_position', 'post', $args );
add_action( 'init', 'user_staff_position', 0 );

Now, change the Post Type parameter in the following line:

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

…from post to user, like so:

register_taxonomy( 'staff_position', 'user', $args );

Now, go to the WP-Admin, and you should find a new menu added under the Users menu, as seen below.

new user menu
Assigning the Custom Taxonomy

Navigate to the new menu and create a few terms. For this example, we created two items: CEO and Managers.

create user tax

Then go to user editing screen and assign one item from the taxonomy to the user.

user select tax

Query the Users

We are going to display the users in the theme based on the given term (of the taxonomy). But before going further, let’s create a new page template. We are going add the codes throughout the following section within this new template.

In this particular case, we won’t be able to query the users with get_users or WP_User_Query; when you create a new WP_User_Query class, it does not output the Custom Taxonomy that is assigned to the users. Justin Tadlock, in his tutorial, shows us how to use the get_objects_in_term function, instead.

This function outputs the object ID (which in our case the object means the user) that are tied with the term. To use it, we need two parameters: the Term ID and the Taxonomy name. You can spot the Term ID at the Browser URL bar when you edit it as shown below.

term id

Once you’ve found the ID, put it within the function, like so.

$users = get_objects_in_term(3, 'user_position'); 

You can use var_dump() to display the object IDs that have been retrieved; In my case, it returns the users with the ID of 1 and 3.

user object id

Using these IDs, we can also retrieve, for example, the user name and avatar.

<?php if ( !empty( $users ) ) : ?>
	<?php foreach ( $users as $id ) : ?>
		<li class="user-entry">
			<figure><?php echo get_avatar( get_the_author_meta('email', $id), '40' ); ?></figure>
			<h5 class="user-title"><a href="<?php echo esc_url( get_author_posts_url( $id ) ); ?>"><?php the_author_meta( 'display_name', $id ); ?></a></h5>
	<?php endforeach; ?>
<?php endif; ?>

…and, finally, here is the result.

query result

That’s it. You can freely modify the above codes to meet your requirement.