[WordPress] Eliminar el SLUG de la URL de un Custom Post Type CPT
En ocasiones deseamos modificar el permalink 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.