How to create custom taxonomies in Wordpress


Manually Creating Custom Taxonomies




Add the following code in your theme’s functions.php file or in a site-specific plugin (recommended) to create a hierarchical custom taxonomy like categories:



//hook into the init action and call create_book_taxonomies when it fires

add_action( 'init', 'create_topics_hierarchical_taxonomy', 0 );



//create a custom taxonomy name it topics for your posts



function create_topics_hierarchical_taxonomy() {



// Add new taxonomy, make it hierarchical like categories

//first do the translations part for GUI



  $labels = array(

    'name' => _x( 'Topics', 'taxonomy general name' ),

    'singular_name' => _x( 'Topic', 'taxonomy singular name' ),

    'search_items' =>  __( 'Search Topics' ),

    'all_items' => __( 'All Topics' ),

    'parent_item' => __( 'Parent Topic' ),

    'parent_item_colon' => __( 'Parent Topic:' ),

    'edit_item' => __( 'Edit Topic' ),

    'update_item' => __( 'Update Topic' ),

    'add_new_item' => __( 'Add New Topic' ),

    'new_item_name' => __( 'New Topic Name' ),

    'menu_name' => __( 'Topics' ),

  ); 



// Now register the taxonomy



  register_taxonomy('topics',array('post'), array(

    'hierarchical' => true,

    'labels' => $labels,

    'show_ui' => true,

    'show_admin_column' => true,

    'query_var' => true,

    'rewrite' => array( 'slug' => 'topic' ),

  ));



}

To create a non-hierarchical custom taxonomy like Tags, add this code in your theme’s functions.php or in a site-specific plugin: hook into the init action and call create_topics_nonhierarchical_taxonomy when it fires



add_action( 'init', 'create_topics_nonhierarchical_taxonomy', 0 );



function create_topics_nonhierarchical_taxonomy() {



// Labels part for the GUI



  $labels = array(

    'name' => _x( 'Topics', 'taxonomy general name' ),

    'singular_name' => _x( 'Topic', 'taxonomy singular name' ),

    'search_items' =>  __( 'Search Topics' ),

    'popular_items' => __( 'Popular Topics' ),

    'all_items' => __( 'All Topics' ),

    'parent_item' => null,

    'parent_item_colon' => null,

    'edit_item' => __( 'Edit Topic' ),

    'update_item' => __( 'Update Topic' ),

    'add_new_item' => __( 'Add New Topic' ),

    'new_item_name' => __( 'New Topic Name' ),

    'separate_items_with_commas' => __( 'Separate topics with commas' ),

    'add_or_remove_items' => __( 'Add or remove topics' ),

    'choose_from_most_used' => __( 'Choose from the most used topics' ),

    'menu_name' => __( 'Topics' ),

  );



// Now register the non-hierarchical taxonomy like tag



  register_taxonomy('topics','post',array(

    'hierarchical' => false,

    'labels' => $labels,

    'show_ui' => true,

    'show_admin_column' => true,

    'update_count_callback' => '_update_post_term_count',

    'query_var' => true,

    'rewrite' => array( 'slug' => 'topic' ),

  ));

}

Notice the difference between two codes. Value for hierarchical argument is true for category-like taxonomy and false for tags-like taxonomies. Also in the labels array for non-hierarchical tags-like taxonomy, we have added null for parent_item and parent_item_colon arguments which means that nothing will be shown in the UI to create parent item.



Displaying Custom Taxonomies

Here is how you can display the terms you added to a custom taxonomy on your single post page. Add this single line of code in your single.php file within the loop:


Wordpress Guru - Create Custom Taxonomies

<?php the_terms( $post->ID, 'topics', 'Topics: ', ', ', ' ' ); ?>

You can add it in other files as well such as archive.php, index.php, and anywhere else you want to display the taxonomy.



By default your custom taxonomies use the archive.php template to display posts. However, you can create a custom archive display for them by creating taxonomy-{taxonomy-slug}.php.



Custom taxonomies can be used in many ways. Combine them with custom post types and custom meta boxes, and you can create highly customized content management system (CMS) built to meet your needs. Let us know how you are using custom taxonomies on your websites?



Comments