Create Taxonomy For a WordPress User

As we all know, “taxonomy” is a prominent feature provided by WordPress that we can allocate to a default post or custom post type. This feature is not available for the users. If you want to Create Taxonomy For a WordPress User, then this article is for you.

Prerequisites for this functionality
1) WordPress installed.
2) A theme where you can write the code in functions.php.
3) ACF plugin installed and activated.

If you have all the above, then let’s get started:

Step 1 – Register a Taxonomy

The first step is to register a taxonomy with any name. In our example, we will create a taxonomy with the name “user_category”. Add the following code to your active theme’s functions.php file.

<?php
define( 'USER_CATEGORY_NAME', 'user_category' );
add_action( 'init', 'dcs_register_user_category_taxonomy' );
function dcs_register_user_category_taxonomy() {
	register_taxonomy(
		USER_CATEGORY_NAME, 
		'user', 
		array( 
			'public' => true,
			'labels' => array(
				'name'=> 'User Categories',
				'singular_name'=> 'User Category',
				'menu_name'=> 'User Categories',
				'search_items'=> 'Search User Category',
				'popular_items' => 'Popular User Categories',
				'all_items'=> 'All User Categories',
				'edit_item'=> 'Edit User Category',
				'update_item'=> 'Update User Category',
				'add_new_item'=> 'Add New User Category',
				'new_item_name'=> 'New User Category Name',
			),
			'update_count_callback' => function() {
				return; 
			}
		)
	);
}
?>

Step 2 – Add admin menu

Now we have to add an admin menu item under the user page using “add_users_page” hook. Add the following code to your active theme’s functions.php file.

<?php
add_action( 'admin_menu', 'dcs_add_user_categories_admin_page' );
function dcs_add_user_categories_admin_page() {
	$taxonomy = get_taxonomy( USER_CATEGORY_NAME );
	add_users_page(
		esc_attr( $taxonomy->labels->menu_name ),
		esc_attr( $taxonomy->labels->menu_name ),
		$taxonomy->cap->manage_terms,
		'edit-tags.php?taxonomy=' . $taxonomy->name
	);
}

Up to here, your taxonomy is ready for WordPress users, but the problem is that when we will add a term, then this will activate the post menu from the left.

To fix this issue, add the following code to your active theme’s functions.php file.

<?php
add_filter( 'submenu_file', 'dcs_set_user_category_submenu_active' );
function dcs_set_user_category_submenu_active( $submenu_file ) {
	global $parent_file;
	if( 'edit-tags.php?taxonomy=' . USER_CATEGORY_NAME == $submenu_file ) {
		$parent_file = 'users.php';
	}
	return $submenu_file;
}