We need to create the WordPress rewrite rule to handle multi-level slugs such as:
function cpt_rewrite_rule($wp_rewrite) {
$rules = array();
$terms = get_terms( array(
'taxonomy' => 'taxonomy_name',
'hide_empty' => false,
) );
$post_type="post_type_name";
foreach ($terms as $term) {
$rules['parent_slug_name/' . $term->slug . '/([^/]*)$'] = 'index.php?post_type=" . $post_type. "&post_type_name=$matches[1]&name=$matches[1]';
}
// merge with global rules
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'cpt_rewrite_rule');
This filter will be called when flushing rewrite rules. I recommend you go to Settings > Permalinks and just save them once again to flush the rewrite rules.