IIS 7 Rewrite with parent categories

Finally figured out the answer. It is a mix of multiple different solutions I have found online but here it is!

First step is to add this to your functions.php

add_rewrite_rule(
    'products/([^/]+)/([^/]+)/?',       
    'index.php?pmfg_product_categories=$matches[1]&products=$matches[2]',      
    'top'
);

Secondly you will need this in your web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules><rule name="WordPress Rule" stopProcessing="true"><match url=".*"/><conditions><add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/><add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/></conditions><action type="Rewrite" url="index.php?page_id={R:0}"/></rule>
<rule name="wordpress" patternSyntax="Wildcard">
<match url="*"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Rewrite" url="index.php"/>
</rule></rules>
</rewrite>
</system.webServer>
</configuration>

Lastly here is how I have my custom post type and taxanomy setup. Replace “yourid” with whatever you want to make sure you dont have any issues with other plugins.

// Register Custom Post Type
function yourid_product_tax_type(){
    $labels = array(
        'name'                       => _x( 'Product Categories', 'Taxonomy General Name', 'text_domain' ),
        'singular_name'              => _x( 'Product Category', 'Taxonomy Singular Name', 'text_domain' ),
        'menu_name'                  => __( 'Product Categories', 'text_domain' ),
        'all_items'                  => __( 'All Product Categories', 'text_domain' ),
        'parent_item'                => __( 'Parent Category', 'text_domain' ),
        'parent_item_colon'          => __( 'Parent Category:', 'text_domain' ),
        'new_item_name'              => __( 'New Product Category Name', 'text_domain' ),
        'add_new_item'               => __( 'Add New Product Category', 'text_domain' ),
        'edit_item'                  => __( 'Edit Product Category', 'text_domain' ),
        'update_item'                => __( 'Update Product Category', 'text_domain' ),
        'separate_items_with_commas' => __( 'Separate categories with commas', 'text_domain' ),
        'search_items'               => __( 'Search Product Categories', 'text_domain' ),
        'add_or_remove_items'        => __( 'Add or remove product categories', 'text_domain' ),
        'choose_from_most_used'      => __( 'Choose from the most used product categories', 'text_domain' ),
        'not_found'                  => __( 'Product Category Not Found', 'text_domain' ),
    );
    $args = array(
        'label' => 'Product Categories',
        'labels'                     => $labels,
        'hierarchical'               => true,
        'public'                     => true,
        'show_ui'                       => true,
        'show_in_nav_menus'             => true,
        'args'                          => array( 'orderby' => 'term_order' ),
        'rewrite'             => array(
                'slug' => 'test',
                'with_front'=>true,                 
            ),
        'query_var'                     => true,
    );
    register_taxonomy( 'yourid_product_categories', array(), $args );
}
add_action( 'init', 'yourid_product_tax_type', 0 );

function yourid_post_type() {       
    $labels = array(
        'name'                => _x( 'Products', 'Post Type General Name', 'text_domain' ),
        'singular_name'       => _x( 'Product', 'Post Type Singular Name', 'text_domain' ),
        'menu_name'           => __( 'Products', 'text_domain' ),
        'parent_item_colon'   => __( 'Parent Product: ', 'text_domain' ),
        'all_items'           => __( 'All Products', 'text_domain' ),
        'view_item'           => __( 'View Product', 'text_domain' ),
        'add_new_item'        => __( 'Add New Product', 'text_domain' ),
        'add_new'             => __( 'Add New', 'text_domain' ),
        'edit_item'           => __( 'Edit Product', 'text_domain' ),
        'update_item'         => __( 'Update Product', 'text_domain' ),
        'search_items'        => __( 'Search Product', 'text_domain' ),
        'not_found'           => __( 'Product Not Found', 'text_domain' ),
        'not_found_in_trash'  => __( 'Product not found in Trash', 'text_domain' ),
    );
    $rewrite = array(
        'slug'                => 'products',
        'with_front'          => true,
        'pages'               => true,
        'feeds'               => true,
    );
    $args = array(
        'label'               => __( 'yourid_product', 'text_domain' ),
        'description'         => __( 'YourName Products', 'text_domain' ),
        'labels'              => $labels,           
        'taxonomies'          => array( 'yourid_product_categories' ),
        'hierarchical'        => true,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,          
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'rewrite'             => array(
            'slug'=>'products',
            'with_front'=>false,
        ),
        'capability_type'     => 'page',
    );
    register_post_type( 'yourid_product', $args );      
}

// Hook into the 'init' action
add_action( 'init', 'yourid_post_type', 0 );

If you have any issues or need assistance let me know!