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

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

slug-wordpress_linux_hispano

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.