Cambiar slug a custom post type

En ocasiones vamos a necesitar que nuestro custom post type tenga o un prefijo distinto, o una estructura distinta en la url, por ejemplo añadir el id.

En este caso, vamos a usar el ID como slug para el custom post type «candidato»:

// Slug candidatos
function mycustomname_links($post_link, $post = 0) {
    if($post->post_type === 'candidato') {
        return home_url('candidato/' . $post->ID . '/');
    }
    else{
        return $post_link;
    }
}
add_filter('post_type_link', 'mycustomname_links', 1, 3);

function mycustomname_rewrites_init(){
    add_rewrite_rule('candidato/([0-9]+)?$', 'index.php?post_type=candidato&p=$matches[1]', 'top');
}
add_action('init', 'mycustomname_rewrites_init');