add
'rewrite' => array('slug' => 'portfolio-categories'),
but be sure to remove (not sure why that’s there, it tries hides the slug yet tries to rename it to “products” at the same time?):
'rewrite' => array( 'with_front' => false, 'slug' => 'products' ),
So it looks like this:
function mysite_post_types() {
register_post_type('portfolio', array(
'labels' => array(
'name' => _x('Portfolios', 'post type general name', MYSITE_ADMIN_TEXTDOMAIN ),
'singular_name' => _x('Portfolio', 'post type singular name', MYSITE_ADMIN_TEXTDOMAIN ),
'add_new' => _x('Add New', 'portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
'add_new_item' => __('Add New Portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
'edit_item' => __('Edit Portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
'new_item' => __('New Portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
'view_item' => __('View Portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
'search_items' => __('Search Portfolios', MYSITE_ADMIN_TEXTDOMAIN ),
'not_found' => __('No portfolios found', MYSITE_ADMIN_TEXTDOMAIN ),
'not_found_in_trash' => __('No portfolios found in Trash', MYSITE_ADMIN_TEXTDOMAIN ),
'parent_item_colon' => ''
),
'singular_label' => __('Portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
'public' => true,
'exclude_from_search' => false,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => true,
'rewrite' => array('slug' => 'portfolio-categories')
)
);
just make sure the register_post_type closes out correctly, the code you posted ends in the middle of the array. i closed it for you but i’m not sure if you left anything out. some examples here: http://codex.wordpress.org/Function_Reference/register_post_type