You need to update below line at where you have register a custom post type using register_post_type function.
'rewrite' => array('slug' => 'teachers/%cat%')
To change permalink dynamically of post type you have to add below code in functions.php file :
function change_link( $post_link, $id = 0 ) {
$post = get_post( $id );
if ( is_object( $post ) ) {
$terms = wp_get_object_terms( $post->ID, array('teacher-type','year') );
if ( $terms ) {
return str_replace( '%cat%', $terms[0]->slug, $post_link );
}
}
return apply_filters('wpml_permalink', $post_link );
}
add_filter( 'post_type_link', 'change_link', 1, 3 );
//load the template on the new generated URL otherwise you will get 404's the page
function generated_rewrite_rules() {
add_rewrite_rule(
'^teachers/(.*)/(.*)/?$',
'index.php?post_type=teachers&name=$matches[2]',
'top'
);
}
add_action( 'init', 'generated_rewrite_rules' );
After that, you need to flush rewrites permalinks, goto the wp-admin > Settings > permalinks. just update permalink setting using “Save Changes” button.
it’ll return urls like below :
- website.com/teachers/teacher-type/post1
- website.com/teachers/year/post1
Thank you!