En ocasiones deseamos modificar el permalink para de un CPT eliminando el slug que WordPress nos coloca por defecto (el del mismo CPT), sin perder la forma de listar (loop) o de acceder a cada entrada (single).
Bien, la forma más directa de hacerlo es editando el archivo function.php de vuestro theme, también creando un plugin o invocando el código desde el functions.php a través de otro fichero. Para evitar entrar en qué forma es más correcta, simplemente atenderemos a la primera por comodidad. Así, editamos el fichero functions.php Por cierto, la estructura en los permalinks (Ajustes->Enlaces permanentes) debe de ser /%postname%/.
Lo primero, registramos nuestro CPT como siempre, si el tema o el plugin es quien nos provee este CPT no será necesario hacerlo pero sí conocer su nombre para luego poder iterar sobre él.
$ args = array(
‘description’ => ‘Coche CPT’,
‘label’ => __(‘Coches’),
‘public’ => true,
‘rewrite’ => array( ‘slug’ => ‘coche’),
);
register_post_type( ‘coche’ , $ args );
Ahora, para nuestro CPT “coche” aplicamos un filtro
function eliminar_cpt_slug( $ post_link, $ post ) {
if ( ‘coche’ != $ post->post_type || ‘publish’ != $ post->post_status ) {
return $ post_link;
}$ post_link = str_replace( ‘/’ . $ post->post_type . ‘/’, ‘/’, $ post_link );
return $ post_link;
}
add_filter( ‘post_type_link’, ‘eliminar_cpt_slug’, 10, 2 );
Y listo, ya hemos eliminado “coche” de nuestro CPT. Si tenéis dudas, ya sabéis, comentad.