X

Remover el slug de la página padre en WordPress

Si tienes una estructura de páginas padre y páginas hijas o subpáginas, notarás que las urls de las subpáginas se basan en la página padre. En este artículo veremos cómo quitar el slug de la página padre de la url que se genera, lo haremos directamente a través de código.

 

Generalidades

Si tienes una estructura de páginas similar a la siguiente imagen:

 
La estructura de URL para una subpágina será en base a la página padre, por ejemplo:

https://dominio.com/grupo-ejemplo/mi-pagina-de-ejemplo/

 

Resultado Final

Sin embargo lo que queremos obtener es una URL que no tenga referencias de la página principal, es decir:

https://dominio.com/mi-pagina-de-ejemplo/
En la url anterior ya no aparece el texto «grupo-ejemplo», que es el slug de la página padre.

 

Código para cambiar la url

Antes de usar este código tienes que cambiar el enlace permanente de la página hija, puedes agregar un carater «_» delante por ejemplo, esto es debido a que si usas una parte del nombre inicial WordPress agregará igualmente el slug de la página padre.

 
Luego puedes agregar el siguiente código:


add_action('init', 'dcms_custom_rewrite_rule', 10, 0);
function dcms_custom_rewrite_rule() {
	$id_page = 2;
	$new_url='mi-pagina';
	add_rewrite_rule("^{$new_url}/?$","index.php?page_id={$id_page}","top");
}

Puedes agregar este código en el archivo functions.php de tu tema hijo en algún plugin de Snippets.

En el código anterior:

  • Se usa el Hook init que hace referencia a la función dcms_custom_rewrite_rule
  • Dentro de esta función hay dos variables que debes cambiar, la primera es el ID de la página
  • La otra variable es el nuevo texto para el slug
  • Con los valores de estas variables entonces se usa la función de WordPress add_rewrite_rule() para cambiar la url

Como parte final tienes que ir a Ajustes > Enlaces Permanentes y guardar, (no es necesario que hagas cambios en esta pantalla)

 

Conclusión

Como has podido comprobar, puedes cambiar las urls de las páginas hijas y remover el slug de la página padre, hemos visto como realizar esto de manera simple a través de código.

 

Categorías: Core

Ver comentarios (9)

  • Muy buen artículo, como siempre, John. Una consulta ya no tanto a nivel de código sino a nivel de SEO, no habría algún tipo de penalización debido a modificar esa url aunque a nivel de estructura siga manteniendo la estructura padre-hijo.

    Un saludo y muchas gracias por tus artículos.

    • Hola Francisco, ese artículo precisamente surgió por un pedido de un cliente que contrató una asesoría SEO. Lo que sucedió es que el cliente tenía ya posicionada la página hija, pero con la url que no incluía la página padre. Sin embargo por organización, cambió la estructura de páginas, es decir, de cara al SEO quería mantener la url anterior, pero para organización le servía una página padre.

      En conclusión, si ya tienes posicionada una página con una url directa, pero en algún momento la volviste subpágina, si que te puede servir este artículo.

      • Muchas gracias John, perfecta la explicación como siempre y gracias por tus vídeos y aclaraciones. Felicidades por el trabajo.

      • Hola, como te afecta con el sitemap, ya que si se genera con yoast seo, te genera el URL original.?

        o eso no afecta?

  • Buenas Jhon,

    Primera vez que comento, pero en bastantes momentos me ha salvado tu contenido. De las webs con más valor único en el sector sin duda alguna. Brutal.

    Mi duda es: en mi caso tengo que hacer esto para unos 20 y pico artículos. ¿En este caso tendría que repetir el código por cada URL, o hay alguna manera de juntarlos en 1?.

    Saludos y muchas gracias.

    • Hola, puedes abreviar leyendo un array de slugs de páginas, consultando con las funciones de WordPress todas las páginas que te interesan, una vez tengas los slugs si que podrías abreviar el código.

      • Buenas de nuevo,
        Con ayuda de mi hermano informático pude hacerlo. Aquí dejo el resultado probado por si alguien tenía mi misma necesidad:

        add_action('init', 'dcms_custom_rewrite_rule', 10, 0);
        function dcms_custom_rewrite_rule() {
        $id_paginas = array("1", "2");
        $url_paginas = array("url-ejemplo-1", "url-ejemplo-2");
        for ($contador = 0; $contador <= count($id_paginas.count); $contador++) {
        $id_page = $id_paginas[$contador];
        $new_url= $url_paginas[$contador];
        add_rewrite_rule("^{$new_url}/?$","index.php?page_id={$id_page}","top");
        }
        }

        Saludos.