[WordPress] Eliminar el SLUG de la URL de un Custom Post Type CPT

slug-wordpress_linux_hispano

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada.