Cambiar el slug de un Tipo de Entrada Personalizada

25 nov 2016, 00:10:04
Vistas: 32K
Votos: 11

Estoy trabajando con un tema hijo y no quiero editar el archivo que registra un CPT de Portfolio en mi sitio. Utilicé un plugin para cambiar el nombre de Portfolio a Stories, pero el plugin no ofrece una opción para cambiar el slug.

Intenté usar la siguiente función:

function change_slug_of_post_type_portfolio() {
    register_post_type('portfolio', array('rewrite' => array ('slug' => 'stories',)));
}
add_action('init', 'change_slug_of_post_type_portfolio', 20);

Pero esto elimina completamente Portfolio de la barra lateral del administrador de WordPress.

0
Todas las respuestas a la pregunta 2
5
31

El filtro register_post_type_args puede usarse para modificar los argumentos del tipo de entrada:

add_filter( 'register_post_type_args', 'wpse247328_register_post_type_args', 10, 2 );
function wpse247328_register_post_type_args( $args, $post_type ) {

    if ( 'portfolio' === $post_type ) {
        $args['rewrite']['slug'] = 'historias';
    }

    return $args;
}
25 nov 2016 00:18:14
Comentarios

¡Increíble! ¡Esto funcionó!

Darren Bachan Darren Bachan
25 nov 2016 08:42:15

Esto funcionó para mí después de aplicar el paso adicional mencionado por @Felipe Romero: "refrescar" tus Permalinks yendo a Ajustes > Enlaces permanentes y guardando los cambios.

Ralf Ralf
6 feb 2020 18:06:36

@DaveRomsey, ¿Podemos usar el mismo nombre para el slug de la página y el slug del tipo de contenido personalizado?

Naren Verma Naren Verma
11 feb 2022 17:27:37

@NarenVerma Técnicamente puedes hacerlo, pero habrá conflictos con los enlaces permanentes. Yo usaría slugs únicos.

Dave Romsey Dave Romsey
12 feb 2022 19:59:53

@DaveRomsey, En realidad he creado un tipo de publicación personalizado llamado "blog". Ahora también he creado una página de blog y sí, entra en conflicto con la URL. Lo que estoy haciendo es que necesito mostrar todas las publicaciones del blog en esta URL https://example.com/blog y también necesito una URL para un blog de página única llamada https://example.com/blog/post-name

Naren Verma Naren Verma
14 feb 2022 07:41:21
2

La respuesta de @dave-romsey no funcionó para mí, PHP seguía mostrándome Warning: Cannot use a scalar value as an array in /path/to/functions.php Así que opté por la vía de array_merge.

Función completa que necesitas agregar al archivo functions.php de tu tema hijo:

function update_portfolios_slug( $args, $post_type ) {

    if ( 'portfolios' === $post_type ) {

        //$args['rewrite']['slug'] = 'presidentes';

        $my_args = array(
            'rewrite' => array( 'slug' => 'presidentes', 'with_front' => false )
        );

        return array_merge( $args, $my_args );
    }

    return $args;
}

add_filter( 'register_post_type_args', 'update_portfolios_slug', 10, 2 );

Después de subir tu código, no olvides "refrescar" tus Permalinks yendo a Ajustes > Enlaces permanentes y haciendo clic en Guardar cambios.

Saludos.

19 jun 2017 03:41:47
Comentarios

Esto me llevó a la meta, pero algo importante a tener en cuenta es que array_merge no parece fusionar sub-arreglos. Cuando eliminé el slug (ya que estaba configurado personalmente por el plugin), eliminó la base pero también restableció el nombre predeterminado del slug del CPT. Parece que fusionará el rewrite con el resto de los $args, pero reemplazará todo el rewrite, sin fusionarlo también. Conclusión: establece todos los valores de tu rewrite.

rtpHarry rtpHarry
29 nov 2019 14:56:37

@rtpHarry esto es realmente útil de saber. Estoy seguro de que ayudará a otros. ¡Gracias por tu contribución!

Felipe Romero Felipe Romero
5 dic 2019 22:36:57