I know this is an old question but this might help someone elseā¦
To accomplish what you're after you'll need to use the register_post_type and register_taxonomy WordPress functions.
You'll need something similar to this in your functions.php file
// Register Custom Post Type
function products() {
$labels = array(
'name' => 'Products',
'singular_name' => 'Product',
'menu_name' => 'Product',
'parent_item_colon' => 'Parent Product:',
'all_items' => 'All Products',
'view_item' => 'View Product',
'add_new_item' => 'Add New Product',
'add_new' => 'New Product',
'edit_item' => 'Edit Product',
'update_item' => 'Update Product',
'search_items' => 'Search products',
'not_found' => 'No products found',
'not_found_in_trash' => 'No products found in Trash'
);
$args = array(
'label' => 'product',
'description' => 'Product information pages',
'labels' => $labels,
'supports' => array( 'title', 'editor', 'excerpt', ),
'taxonomies' => array( 'category' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'menu_position' => 5,
'menu_icon' => '',
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post'
);
register_post_type( 'product', $args );
}
// Hook into the 'init' action
add_action( 'init', 'products', 0 );
// Register Custom Taxonomy
function product-category() {
$labels = array(
'name' => 'Product Category',
'singular_name' => 'Product Categories',
'menu_name' => 'Product Category',
'all_items' => 'All Product Categories',
'parent_item' => 'Parent Product Category',
'parent_item_colon' => 'Parent Product Category:',
'new_item_name' => 'New Product Category Name',
'add_new_item' => 'Add New Product Category',
'edit_item' => 'Edit Product Category',
'update_item' => 'Update Product Category',
'separate_items_with_commas' => 'Separate product categories with commas',
'search_items' => 'Search product categories',
'add_or_remove_items' => 'Add or remove product categories',
'choose_from_most_used' => 'Choose from the most used product categories',
);
$rewrite = array(
'slug' => 'product-category',
'with_front' => true,
'hierarchical' => true,
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'query_var' => 'product-category',
'rewrite' => $rewrite,
);
register_taxonomy( 'product-category', 'product', $args );
}
// Hook into the 'init' action
add_action( 'init', 'product-category', 0 );
You can use a custom post generator like http://generatewp.com/post-type/ to make your life easier when working through all the options.
It's important once you register your custom post types and taxonomies to flush the DNS rules once you add this code or make any amendments to the URL structure. Do this by visiting the WordPress admin Settings -> Permalinks page and it'll automatically flush the DNS rules.
Edit the following files in your theme folder to control the template displayed:
- archive-product.php
- taxonomy-product-category.php
- single-product.php