Register Taxonomy
Suppose you created a Custom Post Type(CPT) named Portfolio and need a taxonomy for it named Project Type, Then code is:
//hook into the init action and call create_book_taxonomies when it fires
add_action( 'init', 'create_subjects_hierarchical_taxonomy', 0 );
//create a custom taxonomy name it subjects for your posts
function create_subjects_hierarchical_taxonomy() {
// Add new taxonomy, make it hierarchical like categories
//first do the translations part for GUI
$labels = array(
'name' => _x( 'Project Type', 'taxonomy general name' ),
'singular_name' => _x( 'Project Type', 'taxonomy singular name' ),
'search_items' => __( 'Search Category' ),
'all_items' => __( 'All Categories' ),
'parent_item' => __( 'Parent Categories' ),
'parent_item_colon' => __( 'Parent Category:' ),
'edit_item' => __( 'Edit Category' ),
'update_item' => __( 'Update Category' ),
'add_new_item' => __( 'Add New Category' ),
'new_item_name' => __( 'New Project Type' ),
);
// Now register the taxonomy
register_taxonomy('project-type',array('portfolio'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_in_rest' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'subject' ),
));
}
Get custom template part if custom taxonomy
In your archive.php file, you will find ‘get_template_part( ‘template-parts/content’, get_post_format();‘. Replace it by following code:
if ( has_term( '', 'custom_taxonomy' ) ) {
get_template_part( 'template-parts/content', 'portfolio' );
} else {
get_template_part( 'template-parts/content', get_post_format() );
}
Custom CPT Category / Taxonomy Listing
You can use it in any page template or archive page.
$args = array(
'taxonomy' => 'project-type',
'order' => 'ASC'
);
$categories = get_categories($args);
echo '<ul>';
foreach ($categories as $category) {
$url = get_term_link($category);?>
<li><a href="<?php echo $url;?>"><?php echo $category->name; ?></a></li>
<?php
}
echo '</ul>';