Oferta SiteGround Black Friday

Cómo cambiar (gratis) los enlaces permanentes de una tienda WooCommerce

enlaces permanentes permalinks wordpress woocommerce

Los enlaces permanentes de las URLs son el modo en el que WordPress, y sus extensiones, crear las direcciones web de los contenidos. Puedes cambiar esta estructura de URLs en los ajustes de enlaces permanentes de WordPress fácilmente, aunque no se recomienda hacerlo a menudo, para evitar indexar URLs que, tras un cambio, podrían no funcionar.

ajustes enlaces permanentes wordpress

Así, en base a cómo configures la estructura de enlaces permanentes, se crearán las URLs de tus entradas, categorías, etiquetas y páginas.

Enlaces permanentes de WooCommerce

Cuando instalas WooCommerce para crear una tienda online con WordPress se añaden a esta página de ajustes algunas opciones más de enlaces permanentes, las correspondientes a productos y sus taxonomías (categorías, atributos, etc.).

ajustes enlaces permanentes woocommerce

De este modo, si dejas los ajustes de enlaces permanentes por defecto de WooCommerce, al acceder a una URL de un producto será así:

  • Base del producto: https://midominio.com/producto/nombre-producto/
  • Base de la tienda: https://midominio.com/tienda/nombre-producto/
  • Base de la tienda y nombre de categoría: https://midominio.com/tienda/nombre-categoria/nombre-producto/
  • Base personalizada: https://midominio.com/personalizado/nombre-producto/

En general es bastante flexible esta parte, permitiéndote muchas posibilidades, desde las muy informativas (con la base de la categoría) a las más sencillas (base de la tienda).

Pero es que además, están los enlaces permanentes de categorías, etiquetas y atributos, con la peculiaridad de que aquí no hay manera de evitar que se añada automáticamente al enlace permanentes la base de la taxonomía.

O sea, que aunque dejes en blanco el campo en los ajustes de enlaces permanentes las URLs de tus taxonomías llevarán la base, o sea:

  • Categorías de producto: https://midominio.com/categoria-producto/nombre-categoria/
  • Etiquetas de producto: https://midominio.com/etiqueta-producto/nombre etiqueta/

No hay manera (nativa) de quitar ese /categoria-producto/ o /etiqueta-producto/ que sobra absolutamente, no aporta nada, es como el /category/ de los enlaces permanentes de categorías de WordPress: no aporta nada.

Igualmente, mantener la base /producto/ en los productos tampoco aporta nada, y tendrías URLs más sencillas y limpias solo con el nombre del producto ¿verdad? Pues vamos a poner solución a todo esto…

Cómo quitar la base /producto/ de los enlaces permanentes de WooCommerce

Tememos 2 maneras sencillas de conseguirlo…

Con ajuste + código

Para quitar la base /producto/ de los enlaces permanentes de los productos, solo necesitas hacer 2 cosas:

  1. Selecciona la base de producto (/producto/) en los ajustes de enlaces permanentes y guarda los cambios.
  2. Añade el código de abajo a tu archivo de funciones o functions.php del tema o plugin de funciones, lo que prefieras…

ajustes de los enlaces permanentes woocommerce base

/* Quitar producto del slug de productos de WooCommerce */
function ayudawp_quitar_slug_producto( $post_link, $post, $leavename ) {
if ( 'product' != $post->post_type || 'publish' != $post->post_status ) {
return $post_link;
}
$post_link = str_replace( '/producto/', '/', $post_link );
return $post_link;
}
add_filter( 'post_type_link', 'ayudawp_quitar_slug_producto', 10, 3 );
function change_slug_struct( $query ) {
if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
return;
}
if ( ! empty( $query->query['name'] ) ) {
$query->set( 'post_type', array( 'post', 'product', 'page' ) );
} elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) {
$query->set( 'post_type', array( 'post', 'product', 'page' ) );
$query->set( 'name', $query->query['pagename'] );
}
}
add_action( 'pre_get_posts', 'change_slug_struct', 99 );

Guarda los cambios y a partir de este momento las URLs de tus productos serán del tipo: https://midominio.com/nombre-producto/.

Con un plugin específico

La otra posibilidad es usar el plugin gratuito Premmerce Permalink Manager. Después de instalarlo pásate por su página de configuración y cambia el ajuste de WooCommerce por defecto al de slug del producto.

cambiar slug producto premmerce wordpress

Si lo prefieres, también tienes la opción de añadir antes el nombre de la categoría del producto, por si quieres unas URLs aún más semánticas.

Cómo quitar la base /categoria-producto/ de los enlaces permanentes de WooCommerce

El siguiente paso en la simplificación y personalización de las URLs de nuestra tienda online es quitar el innecesario /categoria-producto/ de los slugs de los archivos de las categorías de productos.

En esta ocasión tenemos también varias maneras (gratis) de hacerlo…

Con código y truco «rarito»

Este primer método requiere de 2 pasos. Para empezar, ve a los ajustes de enlaces permanentes de WordPress y, en el apartado de la URL base de la categoría pon simplemente un punto (.) y guarda cambios.

punto en base categorias producto woocommerce

Raro ¿eh? No pasa nada, vamos a por el siguiente y último paso.

Ahora añade el siguiente código como prefieras:

/* Archivos de categorias de productos sin base */
add_filter( 'request', function( $vars ) {
global $wpdb;
if( ! empty( $vars['pagename'] ) || ! empty( $vars['category_name'] ) || ! empty( $vars['name'] ) || ! empty( $vars['attachment'] ) ) {
$slug = ! empty( $vars['pagename'] ) ? $vars['pagename'] : ( ! empty( $vars['name'] ) ? $vars['name'] : ( !empty( $vars['category_name'] ) ? $vars['category_name'] : $vars['attachment'] ) );
$exists = $wpdb->get_var( $wpdb->prepare( "SELECT t.term_id FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt ON tt.term_id = t.term_id WHERE tt.taxonomy = 'product_cat' AND t.slug = %s" ,array( $slug )));
if( $exists ){
$old_vars = $vars;
$vars = array('product_cat' => $slug );
if ( !empty( $old_vars['paged'] ) || !empty( $old_vars['page'] ) )
$vars['paged'] = ! empty( $old_vars['paged'] ) ? $old_vars['paged'] : $old_vars['page'];
if ( !empty( $old_vars['orderby'] ) )
$vars['orderby'] = $old_vars['orderby'];
if ( !empty( $old_vars['order'] ) )
$vars['order'] = $old_vars['order']; 
}
}
return $vars;
});

Guarda el código y los archivos de categorías de producto ya no tendrán añadido el /categoria-producto/ antes del nombre de cada categoría. Las URLs pasarán de https://midominio.com/categoria-producto/nombre-categoria-producto/ a https://midominio.com/nombre-categoria-producto/.

Con un plugin especializado

Ahora vamos a hacer lo mismo pero ayudándonos de un plugin específico, que sirve expresamente para esta funcionalidad, y me refiero de nuevo a la versión gratuita de Premmerce Manager Lite.

Solo tienes que instalarlo, activarlo y, en su página de ajustes, cambiar el ajuste por defecto de WordPress a cualquiera de los dos que ofrece:

  • Solamente el slug de la categoría.
  • Ruta completa de la categoría, incluyendo categoría padre y subcategoría.

cambiar slug categoria producto premmerce wordpress

Prueba y elige el que mejor se adapte a tus necesidades.

Con tu plugin de SEO(Press)

La otra posibilidad para quitar el /categoria-producto/ de tus URLs es, si utilizas el plugin SEOPress (gratis), marcar la casilla al efecto, disponible en los ajustes avanzados del plugin.

quitar categoria producto slug con seopress


Nota importante: Siempre que hagas cambios de este tipo a los slugs, ya sea con código o plugins, guarda ajustes de los enlaces permanentes de WordPress, sin modificar nada, simplemente pásate por la página y guarda cambios, para que de este modo se apliquen las modificaciones que hayas realizado.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en los emoticonos para valorarlo!

Promedio de puntuación 4.3 / 5. Total de votos: 6

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

Sobre el autor

10 comentarios en “Cómo cambiar (gratis) los enlaces permanentes de una tienda WooCommerce”

  1. Bestial artículo Fernando, gracias por tanta aportación

    Que consecuencias puede tener esto a nivel SEO, desconozco si al cambiar el SLUG puede afectar a la URL posicionada. Es algo que nunca me atrevo a hacer por las consecuencias que pudiera tener para mi tienda.

    Quedo atento a tu respuesta

    1. Todo cambio de enlaces permanentes puede provocar montones (o todos) de errores 404 si no haces una redirección de los anteriores a los nuevos. Un plugin como Redirection ayuda mucho tenerlo siempre activo para estas cosas 😉

  2. Hola, Fernando,

    A mí me salta la duda de que lo ideal es que las url de producto lleven la palabra tienda a principio de todo, es decir, http://www.midominio.es/tienda/categoria-producto/producto, esto se puede hacer fácilmente con los ajustes de enlaces permanentes. El problema viene cuando estás dentro de una categoría, la palabra tienda desaparece, http://www.midominio/categoria-producto. Si en la Base de de las categorías de producto pones la palabra tienda te da un error 404 y no se muestran las categorías. Eso pasa cuando pones la misma palabra en Base de categorías y base personalizada de la tienda. Pero claro por tema SEO lo ideal es que la palabra Tienda apareciese tanto en las url de las categorias como en la de producto:
    http://www.midominio/tienda/categoria-producto
    http://www.midominio/tienda/categoria-producto/producto

    Sabes cómo se podría conseguir eso, porque los plugins que ofreces no te da la opción de poner la palabra tienda delante.

    Un saludo y muchas gracias por tu blog

      1. Exacto, no funciona, si pones la palabra Tienda en base de producto y en base de categoría de producto al entrar en las categorías te da un error 404 y no lo entiendo muy bien, la verdad, porque tiene todo el sentido que tiren de la misma url. He probado quitandole la «a» a la palabra tienda en la base de categorias y funciona pero exactamente al misma palabra no.

        Me gustaría que estuviese la palabra Tienda para que salga en los breadcrumbs, porque eso te permite volver a la tienda de una manera más intuitiva que si esta Inicio/categoria-producto. Es mucho mejor Inicio/Tienda/categoria-producto, sobre todo porque estás dentro de la Tienda.

  3. Hola, Fernando,

    Creo que me he explicado mal. No quiero que aparezca categoria-producto. Igual lo he puesto demasiado genérico. Te pongo un ejemplo de lo que quiero en una tienda que estoy haciendo:
    Inicio/tienda/vajillas
    Inicio/tienda/vajillas/plato-hondo

    No quiero la palabra categoria-producto, si no la categoría en particular, la que corresponda:
    Si yo pongo en Base personalizada del producto: /tienda/%product_cat%/
    Y pongo lo mismo para la base de categoria de producto (esto lo pongo porque quiero que en las categorias me salga también la Tienda delante): /tienda/%product_cat%/
    Esta configuración no funciona.
    Perdona, que me he explicado mal y te he hecho perder el tiempo.

    Un saludo y gracias

  4. Hola maestro: He comprobado que los dos fragmentos de código que proporcionas funcionan; pero también he comprobado que lo que cuenta éste post https://www.enriquejros.com/producto-permalinks-woocommerce/ sobre que las páginas se duplican también es cierto.
    O sea, que al ocultar la base «categoria-producto» en la url de las categorías o la base «producto» en la url de los productos tendremos dos páginas con el mismo contenido, pues woocommerce sigue creando las páginas con url con base.
    Por ese motivo imagino que sería necesario redirigir las que crea woocommerce a las que creamos nosotros ocultando la base, y no sé si también será necesario trás redirigir implementar metaetiqueta canonical a dichas páginas
    Por último, por si sirve a alguien que vea éste comentario, te comento que intentando hacer lo que quería con las url he localizado éste plugin https://es.wordpress.org/plugins/permalink-manager-for-woocommerce/ que tiene alguna característica gratuita más que Premmerce. Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
- Responsable: Fernando Tellado ([email protected])
- Fin del tratamiento: Moderación de comentarios para evitar spam
- Legitimación: Tu consentimiento
- Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
- Derechos: Acceso, rectificación, portabilidad, olvido

 

Scroll al inicio